本帖最后由 buzhifou01 于 2019-12-1 20:00 编辑
0x1破解详解
1查壳,发现无壳
2.首先用OD打开CrackMe01.exe发现终止,接着装反调式插件打开,运行的时候发现,需要输入flag,用IDA打开
发现GetWindowTextW函数,该函数取文本框中内容。
3.在OD中对GetWindowTextW下断,接着f9,由于GetWindowTextW在多个地方调用,因此需要f9多次。在文本框中输入字符,输入123456789,点击click,发现没反应。
4.接着我们在ida的import窗口中查找突破函数,找到下面几个有价值的函数:
PostMessageW:用于将一条消息放入到消息队列中
SendMessageW:这两个函数将指定的消息发送到一个或多个窗口
GetMessageW:从调用线程的消息队列里取得一个消息并将其放于指定的结构
DefWindowProcW:为应用程序没有处理的任何窗口消息提供缺省的处理
5.在ida中查看调用PostMessageW的代码块,可以看到PostMessage函数各个参数的值,lParam是输入的个数,wParam是输入的内容。hWnd是接收消息的窗口句柄。
6.双击hWnd,查看引用情况,选中第二个进入,发现WNDCLASSEX 中最重要的成员lpfnWndProc右边有个sub_4027f0函数,进入这个函数
7.看到下面有一个非常重要的消息处理函数DefWindowProcW,往下看看到一个算法代码,一共两个循环,第一个循环累加输入字符串中每个字符的ASCII值+2*数组下标的值,第二个循环是让chText这个数组中的每个字符进行异或处理。
8.在往下可以看到一个if语句从判断条件可以看出计算后的v6为0x4B6。
9,接着可以看到以下代码,其中有函数DrawTextW,后面有把数组chText做为参数,那么这里就跟flag有着联系,当输入的flag正确时,会输出这个flag
10.所以得到flag的代码如下:
[Python] 纯文本查看 复制代码 chText=[0x4F0,0x4DA,0x4D7,0x4D1,0x48c,0x4ff,0x4f5,0x4fe,0x4e3,0x4f8,0x4e7,0x4ff,0x4e3,0x4e9,0x4f0,0x4f3,0x485,0x480,0x484,0x4F2,0x4F4,0x4F3]
for i in range(0,22):
print chr(chText[i]^0x4B6)
flag{ICHUNQIU_FE362DBE}
题目下载:链接:https://pan.baidu.com/s/1ao6KIX-L3d36T9lrJ3z6LA
提取码:55ay
|