逆向,破解 --- 以Windows游戏软件为例:Hearts.exe

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_40554560/article/details/102573454

刚开始学习逆向和破解,Windows游戏软件Hearts.exe没有壳,先练习修改
1.工具 UltraEdit, Ollydbg
2. 以下是破解笔记, 按照顺序操作
3. 没有结束,还有后续很多工作。期待后续完善
4. 有运行界面
////////////// 软件运行图 ///////////////////////////////
在这里插入图片描述
在这里插入图片描述
/////////////////////////以下为破解笔记//////////////////////////////////////////////////////////
废一生 9F 5E 00 4E 1F 75
人鬼不了情 BA 4E 3C 9B 0D 4E 86 4E C5 60
罪过 6A 7F C7 8F
刷存在感! 37 52 58 5B 28 57 1F 61 21 00


嵌入自己的对话框:

( 00B51000 )

00B774B3 6A 01 PUSH 1
00B774B5 58 POP EAX
00B774B6 50 PUSH EAX
00B774B7 68 CD74B700 PUSH 00B774CD
00B774BC 68 D474B700 PUSH 00B774D4
00B774C1 6A 00 PUSH 0
00B774C3 58 POP EAX
00B774C4 50 PUSH EAX
00B774C5 FF15 0414B500 CALL DWORD PTR DS:[<&USER32.MessageBoxW>
00B774CB C3 RETN
00B774CC 006A 7F ADD BYTE PTR DS:[EDX+7F],CH
00B774CF C7 DB C7 ; 未知命令
00B774D0 8F00 POP DWORD PTR DS:[EAX]
00B774D2 0000 ADD BYTE PTR DS:[EAX],AL
00B774D4 37 AAA
00B774D5 52 PUSH EDX
00B774D6 58 POP EAX
00B774D7 5B POP EBX
00B774D8 2857 1F SUB BYTE PTR DS:[EDI+1F],DL
00B774DB 61 POPAD
00B774DC 2100 AND DWORD PTR DS:[EAX],EAX

00B8424A E8 6432FFFF CALL 00B774B3


OllyDbg 加载G:\逆向软件\EXE TEST\DEEE1.exe后,为何出现以下信息 ?
Memory map, item 1
地址 = 00020000
Mapped as = G:\逆向软件\EXE TEST\en-US\DEEE1.exe.mui


单纯窗口显示 ( 00221000 )
调用:
( 00221000 )
00255CA0 E8 691E0000 CALL 00257B0E


延时(地址有时变化 68110C00 ?)

005A7B5E PUSH 33E8
005A7B63 FF15 68115700 CALL DWORD PTR DS:[<&KERNEL32.Sleep>]
005A7B69 C3 RETN


玩家成绩:
( 00D11000 )
第1局 080932E8
第2局 08033EF0


玩家成绩函数:
( 00601000 )
00629B8D CALL 00631287
0062868A CALL 00631287
0063167E CALL 00631287

00631287 MOV EDI,EDI ; D.00631287(guessed Arg1,Arg2,Arg3,Arg4)
关键语句,ECX为返回值:
006312B4 8B4D 14 MOV ECX,DWORD PTR SS:[EBP+14]


主函数入口
( 00C11000 )
00C4606E


程序入口:( 00871000 )
008A4245 E8 BF050000 CALL 008A4809
008A424A E9 4DFDFFFF JMP 008A3F9C


更改字符串:
( 00D01000 )00D028F8


去掉菜单目录en-US限制, 但是只能玩一局
( 00B71000 )
00BA6308 75 07 JNE SHORT 00BA6311
更改为
00BA6308 EB 07 JMP SHORT 00BA6311


玩家名称:(空间大)
( 00871000 )
00874798 UNICODE “He”, East
008747F0 UNICODE “Chang”, North
00874848 UNICODE “Feng”, West


更改窗口标题
( 00871000 )
CALL 008A79AE ; \D.008A79AE

更改008A79AE为:
008A79AE C2 0400 RETN 4


更改本玩家名称:
更改GetUserNameExW, GetUserNameW处指令:
( 00871000 )
008C4425 C703 3A8D0C66 MOV DWORD PTR DS:[EBX],660C8D3A
008C442B C743 04 0B950000 MOV DWORD PTR DS:[EBX+4],950B
008C4432 B8 01000000 MOV EAX,1

代码:
C7 03 3A 8D 0C 66 C7 43 04 0B 95 00 00 B8 01 00 00 00


GetModuleFileNameW 存储地址
( 00D01000 )
0020FAAC


菜单句柄 :(正常情况)菜单句柄此时已经生成
( 003A1000 )
003DA463 CALL DWORD PTR DS:[<&USER32.RegisterClas ; \USER32.RegisterClassW


菜单句柄内存位置:00421000

( 001C1000 ) 0006F1F8


菜单句柄 :(正常情况)菜单此时已经生成
( 00571000 )
005AA59C CALL ESI ; USER32.CreateWindowExW


字符UNICODE

48 00 65 00 43 00 68 00 61 00 6E 00 67 00 46 00 ; H.e.C.h.a.n.g.F.
65 00 6E 00 67 00 ; e.n.g.

7F 89 89 5B ; UNICODE 西安
E0 65 21 95 ; UNICODE 无锡
17 53 AC 4E ; UNICODE 北京
73 5E C9 51 ; UNICODE 平凉
3A 8D 0C 66 0B 95 ; UNICODE 贺昌锋

48 00 65 00 61 00 72 00 74 00 73 00 2E 00 65 00 ; H.e.a.r.t.s…e.
78 00 65 00 ; x.e.


汇编语言基本知识:
1. JMP short TargetAddr
机器码 = TargetAddr - NextInstructionAddr
2.


问题:
1。以下语句在EXE中和内存加载后有变化。为什么?
B8 01000000 MOV EAX,1
2。如何访问EXE内部一个字符串?用汇编语言内部实现.
3. 如何调用EXE内部一个函数?用汇编语言内部实现.
4。文字在本游戏中是如何写上的?
5。判断目录是否存在?
C:\Users\hezhiyu\AppData\Local\Microsoft Games
6。防止UNICODE编辑时被欺骗,NotePad最好
7。

猜你喜欢

转载自blog.csdn.net/weixin_40554560/article/details/102573454