首页
社区
课程
招聘
[原创]学写内存补丁(初级版) - 修正
发表于: 2007-6-30 14:58 12976

[原创]学写内存补丁(初级版) - 修正

2007-6-30 14:58
12976
【文章标题】: 学写内存补丁(初级版)
【文章作者】: KuNgBiM
【作者邮箱】: kungbim@163.com
【作者主页】: http://www.crkcn.com
【软件名称】: QQ聊天记录查看器 5.3
【软件大小】: 648KB
【下载地址】: 自己下载
【加壳方式】: N/A
【保护方式】: 序列号
【编写语言】: Borland Delphi 6.0 - 7.0
【使用工具】: OD、RadASM、Masm32
【操作平台】: 盗版XPsp2
【软件介绍】: 可以不用密码查看QQ聊天记录.
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  我们在玩破解的时候,经常会见到今天象目标这样的软柿子:
  
  004862DC > $  55              push    ebp                          ;  OD载入停在这里
  004862DD   .  8BEC            mov     ebp, esp
  004862DF   .  83C4 F0         add     esp, -10
  004862E2   .  B8 B4604800     mov     eax, 004860B4
  004862E7   .  E8 B403F8FF     call    004066A0
  004862EC   .  A1 F88A4800     mov     eax, dword ptr [488AF8]
  004862F1   .  8B00            mov     eax, dword ptr [eax]
  004862F3   .  E8 E81EFDFF     call    004581E0
  004862F8   .  33C9            xor     ecx, ecx
  004862FA   .  B2 01           mov     dl, 1
  004862FC   .  A1 80F34600     mov     eax, dword ptr [46F380]
  00486301   .  E8 52A9FCFF     call    00450C58
  00486306   .  8B15 E88A4800   mov     edx, dword ptr [488AE8]      ;  QQlogger.00489CF4
  0048630C   .  8902            mov     dword ptr [edx], eax
  0048630E   .  A1 E88A4800     mov     eax, dword ptr [488AE8]
  00486313   .  8B00            mov     eax, dword ptr [eax]
  00486315   .  8B10            mov     edx, dword ptr [eax]
  00486317   .  FF92 E8000000   call    dword ptr [edx+E8]
  0048631D   .  A1 E88A4800     mov     eax, dword ptr [488AE8]
  00486322   .  8B00            mov     eax, dword ptr [eax]
  00486324   .  E8 E7D1F7FF     call    00403510
  00486329   .  A1 F8884800     mov     eax, dword ptr [4888F8]      ;  是否选择了QQ号码
  0048632E   .  8338 00         cmp     dword ptr [eax], 0
  00486331   .  74 69           je      short 0048639C
  00486333   .  A1 D0884800     mov     eax, dword ptr [4888D0]      ;  程序是否注册过
  00486338   .  8338 00         cmp     dword ptr [eax], 0
  0048633B   .  75 3B           jnz     short 00486378               ;  如果程序注册过这里发生跳转!(75 --> EB)
  0048633D   .  33C9            xor     ecx, ecx
  0048633F   .  B2 01           mov     dl, 1
  00486341   .  A1 ECE94600     mov     eax, dword ptr [46E9EC]
  00486346   .  E8 0DA9FCFF     call    00450C58
  0048634B   .  8B15 F08B4800   mov     edx, dword ptr [488BF0]      ;  QQlogger.00489CE4
  00486351   .  8902            mov     dword ptr [edx], eax
  00486353   .  A1 F08B4800     mov     eax, dword ptr [488BF0]
  00486358   .  8B00            mov     eax, dword ptr [eax]
  0048635A   .  8B10            mov     edx, dword ptr [eax]
  0048635C   .  FF92 E8000000   call    dword ptr [edx+E8]
  00486362   .  A1 F08B4800     mov     eax, dword ptr [488BF0]
  00486367   .  8B00            mov     eax, dword ptr [eax]
  00486369   .  E8 A2D1F7FF     call    00403510
  0048636E   .  A1 D0884800     mov     eax, dword ptr [4888D0]
  00486373   .  8338 00         cmp     dword ptr [eax], 0
  00486376   .  74 24           je      short 0048639C
  00486378   >  8B0D 008B4800   mov     ecx, dword ptr [488B00]      ;  到这里就来到程序主窗体
  0048637E   .  A1 F88A4800     mov     eax, dword ptr [488AF8]
  00486383   .  8B00            mov     eax, dword ptr [eax]
  00486385   .  8B15 DC384800   mov     edx, dword ptr [4838DC]      ;  QQlogger.00483928
  0048638B   .  E8 681EFDFF     call    004581F8
  00486390   .  A1 F88A4800     mov     eax, dword ptr [488AF8]
  00486395   .  8B00            mov     eax, dword ptr [eax]
  
  我们根据以上分析很显然得出只要将0048633B处的:
  jnz    00486378 改为 jmp    00486378 就可以完成该软件的破解。
  我们得知该地址中指令jnz对应的机器码是75,而我们需要修改的指令jmp对应的机器码是EB,所以我们可以编写一个简单的补丁程序:
  (这种是最简陋的内存补丁方式,不支持加壳后的程序,因为加壳后的程序有很多代码都是在壳中解码出来的。)
;#######################################################################
;学写内存补丁(初级版)
;
;QQ聊天记录查看器 5.3 - 内存补丁
;
;Patcher by KuNgBiM
;
;2007-06-30
;
; Use: ml /c /coff MemPatcher1.asm
; link /SUBSYSTEM:WINDOWS MemPatcher1.obj
;#######################################################################
.386
.model flat,stdcall
option casemap:none

include		\masm32\include\windows.inc
include 	\masm32\include\kernel32.inc
include 	\masm32\include\user32.inc
includelib 	\masm32\lib\kernel32.lib
includelib	\masm32\lib\user32.lib
;#######################################################################
.data

AppName db 'QQ聊天记录查看器 5.3 - 内存补丁',0
msg_run db '此程序必须与被补丁文件在同一目录下!',0
msg_read db '错误',0
msg_ver db '请检查目标程序是否正确!',0
msg_cap db '启动失败',0
msg_write db '错误',0
m_progname db 'QQlogger.exe',0; 目标文件名
; ---- 补丁数据 ---- 
m_addr_to_patch1 dd 0048633Bh ; 补丁地址
m_original_bytes1 db 075h     ; 原始代码
m_new_bytes1 db 0EBh          ; 补丁代码
m_num_of_bytes1 dd 1          ; 数据大小

m_loop_me dd 5                ; 设置5秒后启动

.data?

read_buffer db 512 dup (?)
startinfo STARTUPINFO <>
pi PROCESS_INFORMATION <>

.code
start:

invoke GetStartupInfo,addr startinfo
invoke CreateProcess,addr m_progname,NULL,NULL,NULL,FALSE,20h,NULL,NULL,addr startinfo,addr pi
test eax,eax
jz _launch_error

mov ebx,m_loop_me

_the_loop:
invoke ReadProcessMemory,dword ptr [pi],m_addr_to_patch1,addr read_buffer,m_num_of_bytes1,0
test eax,eax
jz _read_proc_error

lea esi,read_buffer
lea edi,m_original_bytes1
mov ecx,m_num_of_bytes1
repz cmpsb
jnz _down
jmp _patch_the_mother
_down:
dec ebx
jnz _the_loop
jmp _wrong_ver

_patch_the_mother:
invoke WriteProcessMemory,dword ptr [pi],m_addr_to_patch1,addr m_new_bytes1,m_num_of_bytes1,0
test eax,eax
jz _write_proc_error

jmp _exit

_launch_error:
invoke MessageBox,NULL,addr msg_run,addr msg_cap,MB_ICONSTOP+MB_OK
jmp _exit

_read_proc_error:
invoke MessageBox,NULL,addr msg_read,addr msg_cap,MB_ICONSTOP+MB_OK
jmp _exit

_wrong_ver:
invoke MessageBox,NULL,addr msg_ver,addr msg_cap,MB_ICONSTOP+MB_OK
jmp _exit

_write_proc_error:
invoke MessageBox,NULL,addr msg_write,addr msg_cap,MB_ICONSTOP+MB_OK

_exit:
invoke CloseHandle,dword ptr [pi]
invoke CloseHandle,dword ptr [startinfo]
invoke ExitProcess,0

end start

--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2007年06月30日 PM 04:50:23

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (24)
雪    币: 164
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
刚上来就看到这么好的文章,顶呀……
2007-6-30 15:51
0
雪    币: 164
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
……期待续集……
2007-6-30 15:57
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
跟随学习再说~~
2007-7-2 01:46
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
5
帮老K灌一水,`顶
2007-7-3 09:11
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
跟随学习……期待续集……
2007-7-3 10:40
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
怎么都这么优秀呢!呵呵!佩服!呵呵!
2007-7-5 11:29
0
雪    币: 314
活跃值: (10)
能力值: ( LV12,RANK:570 )
在线值:
发帖
回帖
粉丝
8
我小K也来占个位置.我也正在写此类文章!PATH,LOADER等等
2007-7-5 13:34
0
雪    币: 51
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
学习一下!
2007-7-5 15:31
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
学习....
2007-7-5 22:33
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
新手,学习中
2007-7-5 22:55
0
雪    币: 451
活跃值: (78)
能力值: ( LV12,RANK:470 )
在线值:
发帖
回帖
粉丝
12
学习学习。。。
2007-7-7 21:51
0
雪    币: 204
活跃值: (94)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
代码风格不错啊
2007-7-8 10:33
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
我也想做个程序的内存补丁,就是不会写
2007-8-9 14:59
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
15
fuck 匈牙利命名 in asm
2007-8-9 15:42
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
[QUOTE=;]...[/QUOTE]
跟随学习……期待续集……
2007-8-9 17:19
0
雪    币: 158
活跃值: (43)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
17
顶起来,...
2007-8-9 19:47
0
雪    币: 112
活跃值: (16)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
18
好文,支持!
练习练习!~`````
2007-8-10 08:00
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
才发现老K的这么好的补丁文章呀
  学习汇编的好东东 啊
2007-8-10 12:28
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
用RadAS2.11无法编译构建,
提示如下
Assembling: C:\Documents and Settings\Administrator\My Documents\MemPatcher1.asm
C:\Documents and Settings\Administrator\My Documents\MemPatcher1.asm(17) : fatal error A1000: cannot open file : \masm32\include\windows.inc

望您指导一下,谢谢
2007-8-10 17:50
0
雪    币: 211
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
学习下呢```
2007-8-10 18:01
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
呵呵!佩服!呵呵
2007-8-12 00:12
0
雪    币: 267
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
强啊真的很强
2007-8-12 14:39
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
哇,这么厉害啊,研究一下。
2007-8-13 11:08
0
雪    币: 324
活跃值: (10)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
25
这个补丁是用什么写的 啊!
2007-8-14 16:00
0
游客
登录 | 注册 方可回帖
返回
//