ennead 发表于 2019-9-7 20:34:30

EXE修改心得(铁匠铺出售战争机器)

以HotA 1.54为例,用ollydbg打开h3hota.exe,界面如下:

左侧第1列为内存地址,第2列为机器语言(十六进制),第3列是汇编语言,第4列是注释。

如果我们知道某个功能的机器指令,可以在以上界面中:鼠标右键—搜索—二进制字符串(就是Ctrl+B)


城镇中铁匠铺出售的战争机器类型的子程序代码已知如下:
(From 0x001C3220h to 0x001C329Fh)
83 C8 FF BA 06 00 00 00 B9 05 00 00 00 C7 05 60
AA 6A 00 04 00 00 00 A3 64 AA 6A 00 89 15 68 AA
6A 00 A3 6C AA 6A 00 89 0D 70 AA 6A 00 A3 74 AA
6A 00 89 0D 78 AA 6A 00 A3 7C AA 6A 00 89 15 80
AA 6A 00 A3 84 AA 6A 00 C7 05 88 AA 6A 00 04 00
00 00 A3 8C AA 6A 00 89 0D 90 AA 6A 00 A3 94 AA
6A 00 89 15 98 AA 6A 00 A3 9C AA 6A 00 C7 05 A0
AA 6A 00 04 00 00 00 A3 A4 AA 6A 00 C3 90 90 90
我们截取前面的部分进行搜索,结果如下:


下面我们对每条命令逐行分析:
005C3220/.83C8 FF                  OR EAX,FFFFFFFF
解释:使用操作数FF对EAX寄存器进行OR运算。EAX寄存器是32位累加寄存器,FF(1111 1111)是8位,对EXA寄存器进行运算需要4个FF。OR运算的结果是EAX寄存器中的32位全部变成FFFFFFFF。用于填充内存字节(内存中战争机器的代码为双字,占16个字节,剩下的16个字节用FFFF填充)。
005C3223|.BA 06000000                MOV EDX,6
解释:EDX寄存器,6 = 急救帐篷。
005C3228|.B9 05000000                MOV ECX,5
解释:ECX寄存器,5 = 弹药车。
005C322D|.C705 60AA6A00 04000000   MOV DWORD PTR DS:,4
解释:把4赋予指针引用的DS寄存器地址(内存地址),4 = 弩车, = 城堡。
005C3237|.A3 64AA6A00                MOV DWORD PTR DS:,EAX
解释:把EAX寄存器的值(双字,就是FFFF)赋予指针引用的DS寄存器地址。用于填充字节。
005C323C|.8915 68AA6A00            MOV DWORD PTR DS:,EDX
解释:把EDX寄存器的值(6 = 急救帐篷)赋予指针引用的DS寄存器地址(壁垒城)。
005C3242|.A3 6CAA6A00                MOV DWORD PTR DS:,EAX
解释:填充内存字节。
005C3247|.890D 70AA6A00            MOV DWORD PTR DS:,ECX
解释:把ECX寄存器的值(5 = 弹药车)赋予指针引用的DS寄存器地址(塔楼城)。
005C324D|.A3 74AA6A00            MOV DWORD PTR DS:,EAX
解释:填充内存字节。
005C3252|.890D 78AA6A00            MOV DWORD PTR DS:,ECX
解释:把ECX寄存器的值(5 = 弹药车)赋予指针引用的DS寄存器地址(地狱城)。
005C3258|.A3 7CAA6A00                MOV DWORD PTR DS:,EAX
解释:填充内存字节。
005C325D|.8915 80AA6A00            MOV DWORD PTR DS:,EDX
解释:把EDX寄存器的值(6 = 急救帐篷)赋予指针引用的DS寄存器地址(墓园城)。
005C3263|.A3 84AA6A00                MOV DWORD PTR DS:,EAX
解释:填充内存字节。
005C3268|.C705 88AA6A00 04000000   MOV DWORD PTR DS:,4
解释:把4赋予指针引用的DS寄存器地址,4 = 弩车, = 地下城。
005C3272|.A3 8CAA6A00                MOV DWORD PTR DS:,EAX
解释:填充内存字节。
005C3277|.890D 90AA6A00            MOV DWORD PTR DS:,ECX
解释:把ECX寄存器的值(5 = 弹药车)赋予指针引用的DS寄存器地址(据点城)。
005C327D|.A3 94AA6A00                MOV DWORD PTR DS:,EAX
解释:填充内存字节。
005C3282|.8915 98AA6A00            MOV DWORD PTR DS:,EDX
解释:把EDX寄存器的值(6 = 急救帐篷)赋予指针引用的DS寄存器地址(要塞城)。
005C3288|.A3 9CAA6A00                MOV DWORD PTR DS:,EAX
解释:填充字节。
005C328D|.C705 A0AA6A00 04000000   MOV DWORD PTR DS:,4
解释:把4赋予指针引用的DS寄存器地址,4 = 弩车, = 元素城。
005C3297|.A3 A4AA6A00                MOV DWORD PTR DS:,EAX
解释:填充字节。
005C329C\.C3                           RETN
解释:从段内转移CALL进的子程序中返回
005C329D      90                           NOP
解释:填充机器码字节。
005C329E      90                           NOP
005C329F      90                           NOP

贤知有您 发表于 2019-9-9 12:47:13

感谢楼主分享。
改exe太专业了,颇为复杂些。

旋转猫 发表于 2019-9-9 12:51:22

一般人根本看不懂

boyan2004 发表于 2019-9-9 13:39:43

我就是一般人,完全看不懂

yunings 发表于 2019-9-9 14:19:22

我是一般人+1

xu6926 发表于 2019-9-9 16:11:22

这都太专业了,好厉害

canary 发表于 2019-9-9 16:41:32

一般人过来看的一脸懵逼{:1_270:}

Panda_Y 发表于 2019-9-10 11:19:34

看头像就知道是个老道的程序员

blake 发表于 2019-9-12 18:58:09

这个是直接修改的可执行 二进制/十六进制 代码
当年静态破解共享软件也这么干的,牛刀级的技术,杀鸡用牛刀的那个牛刀
这个要熟悉汇编语言才玩得转,并且暴力改exe,咳咳有可能影响稳定性
还是erm就好啦

ennead 发表于 2019-9-18 20:34:44

没那么高深,可以连蒙带猜的。我就是这么干的。

coolile 发表于 2019-9-23 01:09:56

技术贴啊,支持LZ,进来学习学习

zpx02020 发表于 2024-11-1 11:13:48

页: [1]
查看完整版本: EXE修改心得(铁匠铺出售战争机器)

捐赠