首页
社区
课程
招聘
[旧帖] [分享]去除DeDe反汇编讨厌的警告框(求邀请码) 0.00雪花
发表于: 2009-12-24 09:52 1708

[旧帖] [分享]去除DeDe反汇编讨厌的警告框(求邀请码) 0.00雪花

2009-12-24 09:52
1708
去除DeDe反汇编讨厌的警告框
前几天刚刚下载了这个软件,真郁闷,每次打开都要弹出这个讨厌的红色的对话框,而且中间什么都不能做
过了好久才能点击按钮
界面1
于是自已动手起来采用逆推法找到关键代码
1.运行DeDe程序,用OD中断,然后点击运行再暂停,堆栈窗口中出现如下界面2

2.上图中显然最近的地址为00444C34,保存下该地址A=00444C34
打开OD,Ctrl+G,输入上面的A地址,转到此地址,F2中断,最后F9运行,
程序中断后, 堆栈窗口中出现如下界面3

3.查到返回地址为00444B2C保存下该地址B=00444B2C
  重新载入,打开OD,取消中断A地址,Ctrl+G,输入上面的B地址,转到此地址,F2中断,最后F9运行
中断在关键子函数这:
00444AFC   55            PUSH EBP
00444AFD   8BEC          MOV EBP,ESP
00444AFF   51            PUSH ECX
00444B00   53            PUSH EBX
00444B01   56            PUSH ESI
00444B02   57            PUSH EDI
00444B03   8BDA          MOV EBX,EDX
00444B05   8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
00444B08   8B33          MOV ESI,DWORD PTR DS:[EBX]
00444B0A   81FE 13010000 CMP ESI,113                      ; 比较是否达到时间
00444B10   75 3F         JNZ SHORT DeDe.00444B51         ;关键跳转
00444B12   33C0          XOR EAX,EAX
00444B14   55            PUSH EBP
00444B15   68 364B4400   PUSH DeDe.00444B36
00444B1A   64:FF30       PUSH DWORD PTR FS:[EAX]
00444B1D   64:8920       MOV DWORD PTR FS:[EAX],ESP
00444B20   8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
00444B23   66:BE EFFF    MOV SI,0FFEF
00444B27   E8 F8F4FBFF   CALL DeDe.00404024
00444B2C   33C0          XOR EAX,EAX                  ;上面的中断处,上下打量后发现是一个子函数
00444B2E   5A            POP EDX
00444B2F   59            POP ECX
00444B30   59            POP ECX
00444B31   64:8910       MOV DWORD PTR FS:[EAX],EDX
00444B34   EB 33         JMP SHORT DeDe.00444B69
00444B36   E9 CDF7FBFF   JMP DeDe.00404308
00444B3B   A1 D0CA5A00   MOV EAX,DWORD PTR DS:[5ACAD0]
00444B40   8B00          MOV EAX,DWORD PTR DS:[EAX]
00444B42   8B55 FC       MOV EDX,DWORD PTR SS:[EBP-4]
00444B45   E8 6ACE0200   CALL DeDe.004719B4
00444B4A   E8 21FBFBFF   CALL DeDe.00404670
00444B4F   EB 18         JMP SHORT DeDe.00444B69
00444B51   8B43 08       MOV EAX,DWORD PTR DS:[EBX+8]
00444B54   50            PUSH EAX                                 ; /lParam
00444B55   8B43 04       MOV EAX,DWORD PTR DS:[EBX+4]             ; |
00444B58   50            PUSH EAX                                 ; |wParam
00444B59   56            PUSH ESI                                 ; |Message
00444B5A   8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]             ; |
00444B5D   8B40 34       MOV EAX,DWORD PTR DS:[EAX+34]            ; |
00444B60   50            PUSH EAX                                 ; |hWnd
00444B61   E8 EA2FFCFF   CALL <JMP.&user32.DefWindowProcA>        ; \DefWindowProcA
00444B66   8943 0C       MOV DWORD PTR DS:[EBX+C],EAX
00444B69   5F            POP EDI
00444B6A   5E            POP ESI
00444B6B   5B            POP EBX
00444B6C   59            POP ECX
00444B6D   5D            POP EBP
00444B6E   C3            RETN
4.回想自已刚才打开时是过一段时间才出现这个警告框的,故一定有个时间的控件,也一定有个比较时间的代码
00444B0A   81FE 13010000 CMP ESI,113                      ; 比较是否达到时间
00444B10   75 3F         JNZ SHORT DeDe.00444B51         ;关键跳转
这里改关键跳转是没用的,反而会影起内存错误,这是因为,这是时间控件的一个子函数,,会执行其他操作
5.我们完全可以用OD把00444B0A汇编代码NOP掉,但得讲究方法,既然时间是从0到113,当时间到113就弹出那个可恶的框框,我就改成-1,呵呵,
  结果可想而知,永远都没有那个框框了
  不过想复习下内存补丁的用法
6.就来个汇编的内存补丁吧,还是选择win32汇编,呵呵
原理:
修改之前:
00444B0A   81FE 13010000 CMP ESI,113        
修改之后:
00444B0A   83FE FF       CMP ESI,-1
00444B0D   90            NOP
00444B0E   90            NOP
00444B0F   90            NOP

修改方法:
00444B0A   81h  --->  83h
00444B0C   13h  --->  FFh
00444B0D   01h  --->  90h
00444B0E   00h  --->  90h
00444B0F   00h  --->  90h

代码如下
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; DeDe 3.05反汇编  
; by aoanzhishu 2008
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; reg.asm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat,stdcall
option casemap:none

include     D:\masm32\include\windows.inc
include     D:\masm32\include\kernel32.inc
include     D:\masm32\include\user32.inc
includelib  D:\masm32\lib\kernel32.lib
includelib  D:\masm32\lib\user32.lib

.data

AppName    db    'DeDe反汇编5.3内存补丁',0
msg_run    db    '此补丁必须在同一文件目录下',0
msg_read   db    '错误',0
msg_ver    db    '请检查程序版本',0
msg_cap    db    '启动失败',0
msg_write  db    '错误',0

m_programe  db    'DeDe.exe',0

m_addr1      dd     00444B0Ah
m_addr2      dd     00444B0Ch
m_addr3      dd     00444B0Dh
m_addr4      dd     00444B0Eh
m_addr5      dd     00444B0Fh

m_bytesold1  db     081h
m_bytesnew1  db     083h

m_bytesold2  db     013h
m_bytesnew2  db     0FFh

m_bytesold3  db     001h
m_bytesnew3  db     090h

m_bytesold4  db     000h
m_bytesnew4  db     090h

m_bytesold5  db     000h
m_bytesnew5  db     090h

m_num       dd      1               ;读取字节数

.data?
read_buffer   db  512  dup        (?)
startinfo     STARTUPINFO         <>
info          PROCESS_INFORMATION <>

.code

start:
     invoke   GetStartupInfo,addr startinfo
     invoke   CreateProcess,addr  m_programe,NULL,NULL,NULL,FALSE,20h,0,0,addr startinfo,addr info
     test     eax,eax
     jz       _launch_error
         
     invoke ReadProcessMemory,dword ptr [info],m_addr1,addr read_buffer,m_num,0
     test eax,eax
     jz _read_error
     lea esi,read_buffer
     lea edi,m_bytesold1
     mov ecx,m_num
     repz cmpsb
     jnz _down         
     
     invoke ReadProcessMemory,dword ptr [info],m_addr2,addr read_buffer,m_num,0
     test eax,eax
     jz _read_error
     lea esi,read_buffer
     lea edi,m_bytesold2
     mov ecx,m_num
     repz cmpsb
     jnz _down         

     invoke ReadProcessMemory,dword ptr [info],m_addr3,addr read_buffer,m_num,0
     test eax,eax
     jz _read_error
     lea esi,read_buffer
     lea edi,m_bytesold3
     mov ecx,m_num
     repz cmpsb
     jnz _down         

     invoke ReadProcessMemory,dword ptr [info],m_addr4,addr read_buffer,m_num,0
     test eax,eax
     jz _read_error
     lea esi,read_buffer
     lea edi,m_bytesold4
     mov ecx,m_num
     repz cmpsb
     jnz _down         

     invoke ReadProcessMemory,dword ptr [info],m_addr5,addr read_buffer,m_num,0
     test eax,eax
     jz _read_error
     lea esi,read_buffer
     lea edi,m_bytesold5
     mov ecx,m_num
     repz cmpsb
     jnz _down         
     
     
     jmp _patch
         
_down:
     jmp _wrong
_patch:

     invoke SuspendThread,info.hProcess   
                                                                                                                                                              
                                
     invoke   WriteProcessMemory,info.hProcess ,m_addr1,addr m_bytesnew1,m_num,NULL
     test     eax,eax
     jz       _write_error

     invoke   WriteProcessMemory,info.hProcess ,m_addr2,addr m_bytesnew2,m_num,NULL
     test     eax,eax
     jz       _write_error

     invoke   WriteProcessMemory,info.hProcess ,m_addr3,addr m_bytesnew3,m_num,NULL
     test     eax,eax
     jz       _write_error

     invoke   WriteProcessMemory,info.hProcess ,m_addr4,addr m_bytesnew4,m_num,NULL
     test     eax,eax
     jz       _write_error

     invoke   WriteProcessMemory,info.hProcess ,m_addr5,addr m_bytesnew5,m_num,NULL
     test     eax,eax
     jz       _write_error

     invoke ResumeThread,info.hProcess                                                                  
                                                            
     jmp      _exit
         
_launch_error:
     invoke   MessageBox,NULL,addr msg_run,addr msg_cap,MB_OK
     jmp      _exit
_read_error:
     invoke   MessageBox,NULL,addr msg_read,addr msg_cap,MB_OK
     jmp      _exit  
_wrong:
     invoke   MessageBox,NULL,addr msg_ver,addr msg_cap,MB_OK
     jmp      _exit  
_write_error:
     invoke   MessageBox,NULL,addr msg_write,addr msg_cap,MB_OK
_exit:   

     invoke   CloseHandle,dword ptr [info]
     invoke   CloseHandle,dword ptr [startinfo]
     invoke   ExitProcess,0
   
end start   
7.总结下,我们遇到弹出窗口广告,首先要定位代码,最好选择动态调试定位,然后确定是什么周期函数引发的,在决定怎么绕过这个东东
如果其中有描述不当或错误,欢迎指点与建议

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 92
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
是原创的?、  看着代码就眼花啊   怎么时候才能入门??
2009-12-24 21:10
0
游客
登录 | 注册 方可回帖
返回
//