二进制学习 wsample01a.exe

有趣的二进制学习 wsample01a.exe

这是一个基础的入门小程序,点击运行后发现弹出小框,Hello! Windows

 

用ida静态分析程序,这一段是程序的主逻辑,也是全部逻辑:)

 

可以看到程序只有一个分支test eax,eax是判断条件,直接决定程序的走向。

从头来看

String2 = 2012

String1 = 获取输入的数据

lstrcmpW(eax) 执行函数

Caption “MESSAGE” 设置弹框标题

进入test判断,分两种情况

1、输入的是2012,if eax=0: ZF=1 jnz跳转不实现

else:ZF=0 jnz跳转实现

00401000  /$  55               push ebp

00401001  |.  8BEC             mov ebp,esp

00401003  |.  8B45 10          mov eax,[arg.3] 读取输入的内容给eax

00401006  |.  68 04214000      push wsample0.00402104                   ; /2012

0040100B  |.  50               push eax                                 ; |String1 = 00000001 ???

0040100C  |.  FF15 00204000    call dword ptr ds:[<&KERNEL32.lstrcmpW>] ; lstrcmpW

00401012  |.  6A 00            push 0x0                                 ; /Style = MB_OK|MB_APPLMODAL

00401014  |.  68 10214000      push wsample0.00402110                   ; |MESSAGE

00401019  |.  85C0             test eax,eax                             ; |

0040101B  |. /75 18            jnz short wsample0.00401035              ; |

这个程序的逻辑已经理清了,接下来通过修改值来改变程序的走向。

1、 修改ZF值

test比较之后的关键跳转jnz,这个跳转有ZF控制,修改ZF值,改变跳转走向。

 

2、 修改汇编跳转

直接改变跳转语句,实现程序走向的改变

 

嘿嘿,基本上差不多了。

原文地址:https://www.cnblogs.com/zhaijiahui/p/7169315.html