(一) 题目1 (本题20`)

(前3步分析过程不停的掉到坑里,有好多分析是无用的,请简略看)

1.查看exe文件运行情况

img

2.ida分析,查看结构图有无报红花指令报错,找main0,F5看伪代码

img

  1. 密钥必须为18位

img

  1. 发现有一个除零异常,先不管往后看

img

  1. 看见加密模块,解析加密算法

img

img

依照次加密循环,只需将加密后密文加密两次就可以得到明文。

及efabcdgh->cdefabgh->abcdefgh。

  1. 回头看异常处理部分,动调看一下处理情况

img

发现处理完后并不会回到程序继续运行,因此加密函数并不会使用主函数的后续功能,说明前面推导错误浪费了时间,真的模块在异常处理当中。

  1. 找到除零异常位置4012139

img

  1. 在x32中下断点

img

随便输入18位输入数据,动调找seh链,转跳到断点后看seh模块

img

401005为自己设定的异常处理,回到ida找该处理模块。其他的异常不用管

  1. 追入模块内部

img

追入sub_401020

img

发现真正的加密模块。

img

&3是和0011做异或,0x0C=0000 1100,0xF0=11110000所以有对每位char型的8比特值进行二进制操作

img

按道理只需要将密文迭代三次可以得到原flag

10.byte_429A30就是密文信息

img

复制密文信息 D5 96 C4 F6 07 45 57 77 76 E5 F6 48 47 F7 48 17

img

11.下断点开始动调

img

修改输入信息为密文

img

步进后得到第一次加密结果 密文1:5D D9 9C 6F E0 A4 75 B7 B7 BE 00 C5 C5 10 95 92

  1. 重复以上步骤2次

密文2:75 AD B9 87 1E 6A E7 BB FB DC 00 C5 C5 10 95 92

明文:57 BA EB A8 82 F6 7E 8C C0 5E 00 C5 C5 10 95 92

  1. 解不出来。原来是落下一步,还要先和序列号相加,前面的计算又浪费了

img

那就手算吧

img

根据加密过程可知逆运算需要:

高两位右移6位,中两位右移2位,低四位左移5位

img

得到明文 57 65 41 6C 6C 4C 6F 76 65 52 65 76 65 72 73 65

小工具助我一臂之力:WeAllLoveReverse

img

  1. 得到flag:WeAllLoveReverseXX,后两位任意

img

(二) 题目2 (本题20`)

1.查看exe文件运行情况

2.ida分析,查看结构图有无报红花指令报错,找main0,F5看伪代码,将比对数按R更改成字符

img

可以看出来是一个a*x+b的仿射加密,但是区间范围改成了A~Y,是魔改的仿射。

其中a=2,b=7

  1. 找到密文Str2

img

img

密文是 HIPHSFUPSU

  1. 放入破译脚本中进行破解

img

得到flag:ANEASYTEST

img

(三) 题目3 (本题20`)

1.查看exe文件运行情况

2.ida分析,查看结构图有无报红花指令报错,找main0,F5看伪代码

看不见输入函数部分,但是有个sub_401005

img

追入sub_401005查看发生了什么

img

继续追

img

可以看出来这是一个文件的hook并不影响代码,因为考试原因不详细分析,知道这个函数实现了字符串输入,并最终把字符串传入了内存Str

  1. 分析加密部分

Str为输入内容

img

实现了两次异或加密。最后与密文相比对,其中输入必须为10字符。

由于异或的加解密相同,不管异或多少次,都可以用密文通过运行得到明文。

  1. 抓密文去喽

格式不对?AU快捷键改一下

img

抓到密文 RhSrppYzw,

img

  1. 下断点开始计算明文,上图中断点已下好,断点下载比对加密后明文和密文的位置,运行到这里就已经加好密了

动调输入密文,断点处查看内存中的加密结果就是明文

img

  1. 抓到明文 IsHackBad?

img

img

  1. 验证

img

(四) 题目4 (本题20`)

1.查看exe文件运行情况

2.ida分析,查看结构图有无报红花指令报错,找main0,F5看伪代码

很明显的结构,输入固定8位,经算法后比对结果。那么算法就在sub_40100F或sub_401032中

img

  1. 追入sub_40100F找加密算法

函数很复杂,一层套一层,感觉不想简单的加密,应该属于DES/MD5/RC4/SHA当中的了

开始找特征值,看见有48,还有Src[48],很像DES的加密密钥嗷

img

  1. 追入sub_401032找加密算法

都是和48位密钥的操作,判断是des

img

  1. 尝试动调对密码加密得到flag但是失败了,不过找到了密文

img

密文为42 AC 43 D3 F1 44 B1 36

可以看出来V7就是密钥

img

  1. 不能偷懒,还是用脚本老老实实破解吧

img

破解flag 1_L0V5_@

  1. 验证

img

(五) 题目5 (本题20`)

  1. 查看exe文件运行情况

这道题还多了个提示,看起来应该很复杂

img

  1. ida分析,查看结构图有无报红花指令报错,找main0,F5看伪代码

都是定义信息,看来加密内容应该在三个sub函数当中

img

  1. 从sub_401028开始看

该函数说明输入必须为6位,并返回了一个新函数,输入内容在主函数中为Source,不再是Str

img

  1. 追入sub_40100A

img

这一步实现了一个置换,让Str即初始输入变成逆序,返回结果result=3

  1. 看函数sub_40100F

img

给Str传入输入信息,但是只传了前四位,就是原flag的后四位

  1. 继续追入

img

似曾相识的结构,追入函数查看

img

这不是sha256的密钥输入嘛

img

可以判定第二个函数是对明文进行加密了

  1. 继续看第三个函数sub_401014,追入查看

img

原来就是比对结果

Big_Numbers3_42AA30是hash的散列密钥 这么长的密钥串,更加确定是sha,md5的128位没有这么长

img

  1. 破解脚本,启动!

感谢老师的工具和提示

img

  1. 分析以上过程,可知flag为6位,后四位是逆序的love,前两为随意小写字母

得到flag xxevol

img