【文章标题】: 快脱自由棋王联众象棋助手1.5
【文章作者】: RCracker
【下载地址】: 自己搜索下载
【软件介绍】: 无
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
-----------------------------------------------------------------
---------------
【详细过程】
一、找OEP+Dump子程序
00451000 > 60 PUSHAD
//进入OllyDbg后暂停在这
00451001 E8 00000000 CALL 自由棋王.00451006
00451006 5D POP EBP
00451007 50 PUSH EAX
00451008 51 PUSH ECX
00451009 EB 0F JMP SHORT 自由棋王.0045101A
0045100B B9 EB0FB8EB MOV ECX,EBB80FEB
00451010 07 POP ES
; 段寄存器修饰
00451011 B9 EB0F90EB MOV ECX,EB900FEB
00451016 08FD OR CH,BH
00451018 EB 0B JMP SHORT 自由棋王.00451025
0045101A F2: PREFIX REPNE:
; 多余前缀
0045101B ^ EB F5 JMP SHORT 自由棋王.00451012
0045101D ^ EB F6 JMP SHORT 自由棋王.00451015
BP WaitForDebugEvent
中断后取消断点,看堆栈:
~~~~~~~~~~~~~~~~~~~~~~~`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0012DAC4 004398E6 /CALL 到 WaitForDebugEvent 来自 自由棋
王.004398E0
0012DAC8 0012EB74 |pDebugEvent = 0012EB74
//数据窗口跟随
0012DACC 000003E8 \Timeout = 1000. ms
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
现在去代码窗口Ctrl+G:004398E6
Ctrl+F在当前位置下搜索命令:or eax,0FFFFFFF8
找到第一处在00439F09处:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
00439EBF D8F5 FDIV ST,ST(5)
00439EC1 FFFF ???
; 未知命令
00439EC3 000F ADD BYTE PTR DS:[EDI],CL
00439EC5 8C41 02 MOV WORD PTR DS:[ECX+2],ES
00439EC8 0000 ADD BYTE PTR DS:[EAX],AL
00439ECA 8B8D D8F5FFFF MOV ECX,DWORD PTR SS:[EBP-A28]
00439ED0 3B0D DC4A4600 CMP ECX,DWORD PTR DS:[464ADC]
00439ED6 0F8D 2F020000 JGE 自由棋王.0043A10B
00439EDC 8B95 48F6FFFF MOV EDX,DWORD PTR SS:[EBP-9B8]
00439EE2 81E2 FF000000 AND EDX,0FF
00439EE8 85D2 TEST EDX,EDX
00439EEA 0F84 AD000000 JE 自由棋王.00439F9D
00439EF0 6A 00 PUSH 0
00439EF2 8BB5 D8F5FFFF MOV ESI,DWORD PTR SS:[EBP-A28]
00439EF8 C1E6 04 SHL ESI,4
00439EFB 8B85 D8F5FFFF MOV EAX,DWORD PTR SS:[EBP-A28]
00439F01 25 07000080 AND EAX,80000007
00439F06 79 05 JNS SHORT 自由棋王.00439F0D
00439F08 48 DEC EAX
00439F09 83C8 F8 OR EAX,FFFFFFF8
//返回到这里
00439F0C 40 INC EAX
00439F0D 33C9 XOR ECX,ECX
00439F0F 8A88 30424600 MOV CL,BYTE PTR DS:[EAX+464230]
00439F15 8B95 D8F5FFFF MOV EDX,DWORD PTR SS:[EBP-A28]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
Ctrl+a分析:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
00439EBD > \83BD D8F5FFFF>CMP DWORD PTR SS:[EBP-A28],0
//在这里下断,Shift+F9中断下来
00439EC4 . 0F8C 41020000 JL 自由棋王.0043A10B
00439ECA . 8B8D D8F5FFFF MOV ECX,DWORD PTR SS:[EBP-A28]
00439ED0 . 3B0D DC4A4600 CMP ECX,DWORD PTR DS:[464ADC]
00439ED6 . 0F8D 2F020000 JGE 自由棋王.0043A10B
00439EDC . 8B95 48F6FFFF MOV EDX,DWORD PTR SS:[EBP-9B8]
00439EE2 . 81E2 FF000000 AND EDX,0FF
00439EE8 . 85D2 TEST EDX,EDX
----------------------省略部分代码------------------------
00439F88 . E8 621D0000 CALL 自由棋王.0043BCEF
00439F8D . 83C4 0C ADD ESP,0C
00439F90 . 25 FF000000 AND EAX,0FF
//这里Patch ★
00439F95 . 85C0 TEST EAX,EAX
00439F97 . /0F84 6E010000 JE 自由棋王.0043A10B
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
Patch代码:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
inc DWORD PTR SS:[EBP-0A28]
mov DWORD PTR DS:[464ADC+4],1
jmp 00439EC4
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
同时看堆栈:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0012EB84 00000000
0012EB88 00000000
0012EB8C 00401EBC 自由棋王.00401EBC
//00401EBC就是OEP
0012EB90 00000002
0012EB94 00000000
0012EB98 00401EBC 自由棋王.00401EBC
0012EB9C 00401EBC 自由棋王.00401EBC
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
在0043A10B下断点:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0043A0FF > 61 POPAD
0043A100 . 9D POPFD
0043A101 > C785 E0F5FFFF>MOV DWORD PTR SS:[EBP-A20],10002
; UNICODE "::=::\"
0043A10B > E9 FB0D0000 JMP 自由棋王.0043AF0B
//在这里下断点,Shift+F9中断下来
0043A110 8B DB 8B
0043A111 8D DB 8D
0043A112 E4 DB E4
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
运行LordPE,直接Dump出子进程
二、找IAT
OD载入dumped.exe:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
00451000 > 60 PUSHAD
//停在这里
00451001 E8 00000000 CALL dumped.00451006
00451006 5D POP EBP
00451007 50 PUSH EAX
00451008 51 PUSH ECX
00451009 EB 0F JMP SHORT dumped.0045101A
0045100B B9 EB0FB8EB MOV ECX,EBB80FEB
00451010 07 POP ES
; 段寄存器更改
00451011 B9 EB0F90EB MOV ECX,EB900FEB
00451016 08FD OR CH,BH
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
Ctrl+g 到 00401EBC
新建EIP:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
00401EBC 68 60914000 PUSH dumped.00409160
00401EC1 E8 EEFFFFFF CALL dumped.00401EB4
//F7进入
00401EC6 0000 ADD BYTE PTR DS:[EAX],AL
00401EC8 40 INC EAX
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
F7进入:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
00401EB4 - FF25 28124000 JMP DWORD PTR DS:[401228]
//注意这里
00401EBA 0000 ADD BYTE PTR DS:[EAX],AL
00401EBC 68 60914000 PUSH dumped.00409160
00401EC1 E8 EEFFFFFF CALL dumped.00401EB4
00401EC6 0000 ADD BYTE PTR DS:[EAX],AL
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
数据窗口Ctrl+g到 401228:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
00401000 6610782A
00401004 66109881
---省略很多代码---
00401288 660E5FDE
//Ctrl+g到这里
004012B0 660E60B0
004012B4 660D9A27
004012B8 660D2DD4
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
三、修复
运行自由棋王联众象棋助手.exe及ImportREC:
OEP RVA=1EBC
RVA=1000
SIZE=4012B8-401000=2B8
剪去无效函数,修复,运行OK!
-----------------------------------------------------------------
---------------
【经验总结】
没什么技术含量,仅供参考.
-----------------------------------------------------------------
---------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完
整, 谢谢!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课