- 积分
- 4353
- 威望
- 0
- 魅力
- 0
- 经验
- 3857
- 热心度
- 0
- 注册时间
- 2019-8-14
- 最后登录
- 2024-3-23
- 主题
- 5
- 回帖
- 256
- 精华
- 0
- 阅读权限
- 50
TA的每日心情 | 开心 2024-3-23 12:26 |
---|
签到天数: 76 天 连续签到: 1 天 [LV.6]地狱战马
5级 Honorable Hero
- 积分
- 4353
|
以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:[6AAA60],4
解释:把4赋予指针引用的DS寄存器地址[6AAA60](内存地址),4 = 弩车,[6AAA60] = 城堡。
005C3237 |. A3 64AA6A00 MOV DWORD PTR DS:[6AAA64],EAX
解释:把EAX寄存器的值(双字,就是FFFF)赋予指针引用的DS寄存器地址[6AAA68]。用于填充字节。
005C323C |. 8915 68AA6A00 MOV DWORD PTR DS:[6AAA68],EDX
解释:把EDX寄存器的值(6 = 急救帐篷)赋予指针引用的DS寄存器地址[6AAA68](壁垒城)。
005C3242 |. A3 6CAA6A00 MOV DWORD PTR DS:[6AAA6C],EAX
解释:填充内存字节。
005C3247 |. 890D 70AA6A00 MOV DWORD PTR DS:[6AAA70],ECX
解释:把ECX寄存器的值(5 = 弹药车)赋予指针引用的DS寄存器地址[6AAA70](塔楼城)。
005C324D |. A3 74AA6A00 MOV DWORD PTR DS:[6AAA74],EAX
解释:填充内存字节。
005C3252 |. 890D 78AA6A00 MOV DWORD PTR DS:[6AAA78],ECX
解释:把ECX寄存器的值(5 = 弹药车)赋予指针引用的DS寄存器地址[6AAA78](地狱城)。
005C3258 |. A3 7CAA6A00 MOV DWORD PTR DS:[6AAA7C],EAX
解释:填充内存字节。
005C325D |. 8915 80AA6A00 MOV DWORD PTR DS:[6AAA80],EDX
解释:把EDX寄存器的值(6 = 急救帐篷)赋予指针引用的DS寄存器地址[6AAA80](墓园城)。
005C3263 |. A3 84AA6A00 MOV DWORD PTR DS:[6AAA84],EAX
解释:填充内存字节。
005C3268 |. C705 88AA6A00 04000000 MOV DWORD PTR DS:[6AAA88],4
解释:把4赋予指针引用的DS寄存器地址[6AAA88],4 = 弩车,[6AAA88] = 地下城。
005C3272 |. A3 8CAA6A00 MOV DWORD PTR DS:[6AAA8C],EAX
解释:填充内存字节。
005C3277 |. 890D 90AA6A00 MOV DWORD PTR DS:[6AAA90],ECX
解释:把ECX寄存器的值(5 = 弹药车)赋予指针引用的DS寄存器地址[6AAA90](据点城)。
005C327D |. A3 94AA6A00 MOV DWORD PTR DS:[6AAA94],EAX
解释:填充内存字节。
005C3282 |. 8915 98AA6A00 MOV DWORD PTR DS:[6AAA98],EDX
解释:把EDX寄存器的值(6 = 急救帐篷)赋予指针引用的DS寄存器地址[6AAA98](要塞城)。
005C3288 |. A3 9CAA6A00 MOV DWORD PTR DS:[6AAA9C],EAX
解释:填充字节。
005C328D |. C705 A0AA6A00 04000000 MOV DWORD PTR DS:[6AAAA0],4
解释:把4赋予指针引用的DS寄存器地址[6AAAA0],4 = 弩车,[6AAAA0] = 元素城。
005C3297 |. A3 A4AA6A00 MOV DWORD PTR DS:[6AAAA4],EAX
解释:填充字节。
005C329C \. C3 RETN
解释:从段内转移CALL进的子程序中返回
005C329D 90 NOP
解释:填充机器码字节。
005C329E 90 NOP
005C329F 90 NOP |
|