逆向的基础备忘

本文深入分析了一款未使用壳程序保护的软件,探讨了其注册验证流程,并揭示了如何通过动态调试工具如ollydbg进行逆向分析。重点解析了DialogBoxParamW函数的作用及其在程序中的动态调用机制,最终通过前端JMP指令解决运行错误问题,深入理解了程序基址动态变化对调用指令的影响。

有个蛮不错的软件,注册费很便宜,不注册也只是在第一次打开时弹个框提示一下。由于很精致,就想看看其保护方式,发现居然没壳,用ollydbg查看找注册码,发现不好爆破。于是想找其弹框的函数,但CreateDialog等都断不下,最后用ShowWindow才断下,检查后知道是DialogBoxParamW。

找到相关的代码后就想直接用UE来处理,结果找不到特征码。。。于是直接在ollydbg中修改,再另存。运行时经常会出错!

对修改后的程序再动态调试发现,原先写的一堆90(NOP)有些变成了其他的指令,于是换成在前端写JMP,这才不出错了。

反复对比各个地址和指令后,考虑到该程序的基址会动态变化,所以Call指令,一些变量的mov等对应的地址其实是会变的,可能程序文件中存的只是个占位符,程序在运行时才把相关的地址填上去。

如下:

002F6EAA  |.  8B0D 74C04000 mov     ecx, dword ptr [40C074]          ; 
002F6EB0  |.  52                 push    edx                         ; /lParam
002F6EB1  |.  68 40E22600   push    0026E240                 ; |DlgProc = xxxx.0026E240
002F6EB6  |.  50                 push    eax                         ; |hOwner
002F6EB7  |.  68 D6000000   push    0D6                         ; |pTemplate = D6
002F6EBC  |.  51                 push    ecx                          ; |hInst => 00250000
002F6EBD  |.  FF15 68D73900 call    dword ptr [<&USER32.DialogBoxPar>; \DialogBoxParamW
002F6EC3  |.  5E               pop     esi                              ;  0019F6F8
002F6EC4  |.  C2 0800       retn    8
002F6EC7  |>  6A 0E         push    0E                               ; /Error = ERROR_OUTOFMEMORY
002F6EC9  |.  FF15 14D43900 call    dword ptr [<&KERNEL32.SetLastErr>; \SetLastError
002F6ECF  |.  83C8 FF       or      eax, FFFFFFFF
002F6ED2  |.  5E               pop     esi
002F6ED3  \.  C2 0800       retn    8

 

转载于:https://my.oschina.net/sqhua/blog/175473

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值