首页
社区
课程
招聘
请会ASM的朋友帮忙,请看看以下代码,能帮我用中文注释每行的意思吗?
发表于: 2004-9-25 16:30 5575

请会ASM的朋友帮忙,请看看以下代码,能帮我用中文注释每行的意思吗?

2004-9-25 16:30
5575
请会ASM的朋友帮忙,请看看以下代码,能帮我用中文注释每行的意思吗?
patcher.asm

;Memory Patcher for Asprotected programs by +DzA kRAker (Regele Piratilor)
;I made this shit because of asprotect.
;this is my simple solution to  bypass asprotect anti-loading
;procedures.
;Well,this is kinda slow because it won't wait for input idle after it executes target,
;it uses a lame method,based on FindWindowExA...i could have used that CreateToolhelpSnapshot
;api,but if i use that one,it will be kindu complicated ,because the patch won't
;be done at the right time...i mean when the packed exe is completly unpacked in memory(!)
;so,FindWindowsExA  turned out to be the best solution...i think you can figure out
;why.
;This should probably work with other packers too (Aspack,UPX,Petite...etc)

.586P                                            
locals
jumps
.model flat,StdCall

Extrn CreateProcessA          :PROC
Extrn FindWindowExA           :PROC
Extrn GetWindowThreadProcessId:PROC   
Extrn OpenProcess             :PROC        
Extrn WriteProcessMemory      :PROC                        
Extrn ExitProcess             :PROC
Extrn MessageBoxA             :PROC

.data
window          db 'LOADME',0   ;the window name of the target
exename         db 'sample.exe',0 ;the executable name of the target                       
pid             dd 0                  ;Process Id                 
Buffer1         dd 0                  ;patch buffer
tit             db 'TNT Memory Patcher v1.0 de +DzA kRAker (Regele Piratilor)',0  
exenfmsg        db 'Target does not seem to be here!',0
msg          db 'sHit HapPEns',0      
StartupInfo     db 48h dup (0)   
ProcessInfo     dd 4 dup (0)      

OFS              = 0040101Ah ;here you enter the address to patch   
                             ;btw,this is not the right offset where the arpr crack
                             ;must be done...go find it by yourself dude!

                             
BytesNumber_1_1 = 1       ;how many bytes do we want to patch?                           
Buffer_1_1   db 075h       ;first byte,second,blahblahblah

.code

Main:
    push    offset tit                  
    mov     dword ptr [StartupInfo],44h
    push    offset ProcessInfo         
    push    offset StartupInfo         
    push    0
    push    0
    push    20h                              
    push    0
    push    0
    push    0
    push    0
    push    offset exename      
    call    CreateProcessA
    test    eax,eax
    jz      exenotfound
   
search:
Call FindWindowExA,0,0,0,offset window            
test eax,eax                                       
jz search ;if a correct window name is not found,we loop
  
Call GetWindowThreadProcessId,eax,offset pid ;we take the PID        
test eax,eax                                      
jz error                                     ; jump to error message                                          
call OpenProcess,0C0h,0,[pid]                ;open the process                  
test eax,eax                                       
jz error   ;same error message                                         

call WriteProcessMemory,EAX,OFS,OFFSET Buffer_1_1,BytesNumber_1_1 ,OFFSET Buffer1
jmp Exit
ret

               
error:                                             
call MessageBoxA,0,offset msg,offset tit,0  
jmp Exit               

exenotfound:
Call MessageBoxA,0,offset exenfmsg,offset tit,0
jmp Exit

Exit:
Call ExitProcess,0     ;time to leave:'(                             
END Main

这是LOADER吗?是动态,静态更改内存数值吗?能帮我用中文注释每行的意思吗?谢谢!

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

收藏
免费 1
支持
分享
最新回复 (5)
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
2
是个LOADER,动态修改内存
这种东西可以很好地对付ASPRO等壳
2004-9-25 17:06
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
能帮我用中文注释每行的意思吗?谢谢!
2004-9-25 18:18
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
4
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;简单注释:
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
patcher.asm

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;这一段话不翻译了(英文不好)。
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

;Memory Patcher for Asprotected programs by +DzA kRAker (Regele Piratilor)
;I made this shit because of asprotect.
;this is my simple solution to  bypass asprotect anti-loading
;procedures.
;Well,this is kinda slow because it won't wait for input idle after it executes target,
;it uses a lame method,based on FindWindowExA...i could have used that CreateToolhelpSnapshot
;api,but if i use that one,it will be kindu complicated ,because the patch won't
;be done at the right time...i mean when the packed exe is completly unpacked in memory(!)
;so,FindWindowsExA  turned out to be the best solution...i think you can figure out
;why.
;This should probably work with other packers too (Aspack,UPX,Petite...etc)

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;.586P这一句代表以下代码具有特权指令
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.586P                                            
locals
jumps
.model flat,StdCall

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;函数声明
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Extrn CreateProcessA          :PROC  ;创建进程函数
Extrn FindWindowExA           :PROC ;查找窗口函数
Extrn GetWindowThreadProcessId:PROC  ;获取过程窗口线程ID  
Extrn OpenProcess             :PROC  ;打开过程      
Extrn WriteProcessMemory      :PROC  ;写入过程内存   
Extrn ExitProcess             :PROC ;退出程序
Extrn MessageBoxA             :PROC ;创建消息对话框

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;定义全局变量
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.data
window          db 'LOADME',0   ;the window name of the target
exename         db 'sample.exe',0 ;the executable name of the target                       
pid             dd 0                  ;Process Id                 
Buffer1         dd 0                  ;patch buffer
tit             db 'TNT Memory Patcher v1.0 de +DzA kRAker (Regele Piratilor)',0  
exenfmsg        db 'Target does not seem to be here!',0
msg          db 'sHit HapPEns',0      
StartupInfo     db 48h dup (0)   
ProcessInfo     dd 4 dup (0)      

OFS              = 0040101Ah ;here you enter the address to patch   
                             ;btw,this is not the right offset where the arpr crack
                             ;must be done...go find it by yourself dude!

                             
BytesNumber_1_1 = 1       ;how many bytes do we want to patch?                           
Buffer_1_1   db 075h       ;first byte,second,blahblahblah

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;程序开始,这一段是创建一个进程
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.code
Main:
    push    offset tit                  
    mov     dword ptr [StartupInfo],44h
    push    offset ProcessInfo         
    push    offset StartupInfo         
    push    0
    push    0
    push    20h                              
    push    0
    push    0
    push    0
    push    0
    push    offset exename      
    call    CreateProcessA
    test    eax,eax
    jz      exenotfound

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;查找进程窗口
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   
search:
Call FindWindowExA,0,0,0,offset window            
test eax,eax                                       
jz search ;if a correct window name is not found,we loop

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;获取过程窗口线程ID
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  
Call GetWindowThreadProcessId,eax,offset pid ;we take the PID        
test eax,eax                                      
jz error                                     ; jump to error message

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;打开进程
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
call OpenProcess,0C0h,0,[pid]                ;open the process                  
test eax,eax                                       
jz error   ;same error message

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;将数据写入进程内存
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
call WriteProcessMemory,EAX,OFS,OFFSET Buffer_1_1,BytesNumber_1_1 ,OFFSET Buffer1
jmp Exit
ret

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;错误消息
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>               
error:                                             
call MessageBoxA,0,offset msg,offset tit,0  
jmp Exit               

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;进程创建错误消息
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
exenotfound:
Call MessageBoxA,0,offset exenfmsg,offset tit,0
jmp Exit

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;完成所有操作之后退出程序
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Exit:
Call ExitProcess,0     ;time to leave:'(                             
END Main
:D :D :D :D :D :D :D :D :( :o :D
2004-9-25 21:26
0
雪    币: 258
活跃值: (230)
能力值: ( LV12,RANK:770 )
在线值:
发帖
回帖
粉丝
5
支持以下:
ANTI-DEBUG的东西:D ;)
2004-9-25 21:33
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
请问下面哪里是对0040101Ah数值更改的?过程怎样的呢?能帮忙写一段单一对0040101Ah上的数值更改FF的ASM码吗?因为我刚学编程不久,汇编不会看。谢谢。
data
window          db 'LOADME',0   ;the window name of the target
exename         db 'sample.exe',0 ;the executable name of the target                       
pid             dd 0                  ;Process Id                 
Buffer1         dd 0                  ;patch buffer
tit             db 'TNT Memory Patcher v1.0 de +DzA kRAker (Regele Piratilor)',0  
exenfmsg        db 'Target does not seem to be here!',0
msg          db 'sHit HapPEns',0      
StartupInfo     db 48h dup (0)   
ProcessInfo     dd 4 dup (0)      

OFS              = 0040101Ah ;here you enter the address to patch   
                             ;btw,this is not the right offset where the arpr crack
                             ;must be done...go find it by yourself dude!

                             
BytesNumber_1_1 = 1       ;how many bytes do we want to patch?                           
Buffer_1_1   db 075h       ;first byte,second,blahblahblah

code
Main:
    push    offset tit                  
    mov     dword ptr [StartupInfo],44h
    push    offset ProcessInfo         
    push    offset StartupInfo         
    push    0
    push    0
    push    20h                              
    push    0
    push    0
    push    0
    push    0
    push    offset exename      
    call    CreateProcessA
    test    eax,eax
    jz      exenotfound
2004-9-28 17:41
0
游客
登录 | 注册 方可回帖
返回
//