郁金香汇编逆向与外挂(61、62)

知识点:

WM_COMMAND消息

窗口回调函数


菜单类CALL分析

Jiack调试软件


1、用Jiack打开扫雷程序。(用郁金香的OD打开跟随时看不到代码)

2、查看菜单中点击窗口。

3、窗口中右击刷新。

4、选择扫雷程序右击跟随ClassProc。

5、当我们选择扫雷程序中的菜单时,都会向主窗口的回调函数发送一个叫WM_COMMAND的信息。

6、设置调试条件断点。WM_COMMAND==msg。注意条件断点下错了也不会有提示。

7、再次访问菜单,则该断点会断下来。

8、根据窗口过程的参数可以看出。

第一个参数为窗口句柄。

第二个参数为消息WM_COMMAND。

第三个为菜单的ID。(关键部分)

第四个为控件的句柄。

9、用代码注入器注入信息。

push 0   (控件句柄)

push 20A (菜单ID)

push 0x111(WM_COMMAND)

push 601AC(窗口句柄)

call 01001BC9(注入的地址)

10、选择出入一次则扫雷程序会跳到中级(中级的地址为20A)。

扫雷程序中不同菜单选项的地址:

初级:209

中级:20A

高级:20B

自定义:20C


计算器程序菜单CALL分析:

1、用Jiack打开计算器程序。

2、点击运行直到左侧显示运行状态为止,这时计算器程序运行窗口显示出来。

3、跟随ClassProc。

4、在窗口程序中的第一句代码中下条件断点。(WM_COMMAND==msg).

5、在计算机的菜单栏中选择科学型,进入断点。

6、获取地址,用代码注入器注入相应信息。


基址分析


以扫雷程序为例:

用CE软件找扫雷程序中红旗数的基址。

1、打开ce软件和扫雷程序。

2、在ce中搜索红旗数的值。

3、根据红旗数一步步确定一个地址。

4、我们搜索到的地址是01005194 。这个地址一直指向红旗剩余数的值。

5、记下这个地址。

6、用Jiack打开扫雷程序。

7、在命令窗口中打入命令 dd 01005194 ,回车。

8、找到地址01005194的值为28 。28为十六进制与扫雷程序中的红旗数40相等。一般来说我们就可以认为这是一个基址。

基址还有另外一个特征。

9、在这个地址下一个内存访问的断点。

10、访问之后找到一个mov eax,dword ptr ds:[0x1005194]语句。

语句括号中的地址就是基址。这个地址就肯定是一个基址。以一个常量的形式存在于汇编代码中。
















你可能感兴趣的:(反汇编,郁金香)