最近思来想去,眼看着自己就要进某厂游戏安全团队实习了,也不能整天的无所事事,所以就寻思着先找点最简单的游戏用来练练手。想到之前逆向过一些小游戏,就把之前分析的扫雷整理了一下啊,写了个外挂,发了上来。
最近实在是比较忙,快期中考试了,什么都不会,所以忙着预习去了,本文只写了关于扫雷逆向的部分,相关的外挂编写已经写差不多了,等最近有时间整理出来o(╯□╰)o
工具
分析对象:winmine/扫雷(windows xp版本)
逆向工具:ollydbg,IDA,peid,ResHacker
操作平台:windows7 旗舰版
分析过程
main函数定位
peid加载winmine发现为vc编写的,没有加过壳,则可以确定加载程序的流程为:获取当前版本号,堆初始化,获取命令行参数,获取环境变量,分离出命令行参数,全局数据和浮点寄存器初始化所以在main(这里应该是winmain了)调用前,调用流程为:
GetVersion()—–>_heap_init()—–>GetCommandLine()—–>_crtGetEnvironmentStrings()—–>_setargv()—–>_setenvp()—–>_cinit()
所以很容易找到winmain的调用地址,跟进之后发现
发现这里便是在做一些初始化
很快找到:
:010022D5 mov ecx, yBottom
.text:010022DB mov edx, xRight
.text:010022E1 push edi ; lpParam
.text:010022E2 push hInstance ; hInstance
.text:010022E8 add ecx, eax
.text:010022EA push edi ; hMenu
.text:010022EB push edi ; hWndParent
.text:010022EC push ecx ; nHeight
.text:010022ED mov ecx, dword_1005A90
.text:010022F3 add edx, ecx
.text:010022F5 push edx ; nWidth
.text:010022F6 mov edx, Y
.text:010022FC sub edx, eax
.text:010022FE mov eax, X
.text:01002303 push edx ; Y
.text:01002304 sub eax, ecx
.text:01002306 push eax ; X
.text:01002307 push 0CA0000h ; dwStyle
.text:0100230C push esi ; lpWindowName
.text:0100230D push esi ; lpClassName
.text:0100230E push edi ; dwExStyle
.text:0100230F call ds:CreateWindowExW
.text:01002315 cmp eax, edi
.text:01002317 mov hWnd, eax
.text:0100231C jnz short loc_1002325
.text:0100231E push 3E8h
.text:01002323 jmp short loc_1002336
.text:01002325 ; ---------------------------------------------------------------------------
.text:01002325
.text:01002325 loc_1002325: ; CODE XREF: WinMain+12Cj
.text:01002325 push ebx
.text:01002326 call sub_1001950 ;位置
.t