吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5947|回复: 29
收起左侧

[CrackMe] 【D01E02】电子管 反破解教程之二 【隐藏 MessageBox】

[复制链接]
dianziguan 发表于 2013-7-14 18:31
CM是什么?Crackme是什么?这是什么东西?楼主发的什么?
他们都是一些公开给别人尝试破解的小程序,制作 Crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 Cracker,想挑战一下其它 Cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破解,KeyGenMe是要求别人做出它的 keygen (序号产生器), ReverseMe 要求别人把它的算法做出逆向分析, UnpackMe 是要求别人把它成功脱壳,本版块禁止回复非技术无关水贴。

本帖最后由 dianziguan 于 2013-7-22 09:23 编辑

把调用api的call 变化成jmp ,起到隐藏作用。od反汇编不出现函数名,给找字符串增加一定难度。
                        mov eax, msbx1       ;MessageBox地址
                        xor eax,36h               ;垃圾代码
                        push eax
                        pop edx                      ;edx==eax
                        push MB_OK
                        push oapp1                    ;offset 窗口标题
                        push oer1                       ;offset 注册不成功
                        push 0
                        xor edx,36h                   ;  垃圾代码
                        lea eax,exit_1                 ;返回地址
                        push eax                        ;返回地址入栈
                        jmp edx                         ;转到MessageBox
exit_1:
以上代码和 invoke MessageBox,NULL,ADDR mesberr_1,ADDR AppName,MB_OK是等效的。

为方便汇编爱好者交流,程序源码贴上。
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\advapi32.inc
includelib \masm32\lib\advapi32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \MASM32\LIB\oleaut32.lib
include \MASM32\include\oleaut32.inc

DlgProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
;BOOL GetVolumeInformation(
;   LPCTSTR  lpRootPathName, // address of root directory of the file system
;   LPTSTR  lpVolumeNameBuffer, // address of name of the volume
;   DWORD  nVolumeNameSize, // length of lpVolumeNameBuffer
;   LPDWORD  lpVolumeSerialNumber, // address of volume serial number
;   LPDWORD  lpMaximumComponentLength, // address of system's maximum filename length
;   LPDWORD  lpFileSystemFlags, // address of file system flags
;   LPTSTR  lpFileSystemNameBuffer, // address of name of file system
;   DWORD  nFileSystemNameSize  // length of lpFileSystemNameBuffer
;  );
.data
DlgName db "MyDialog",0
AppName db "注册程序,(C)电子管 2012.07.15",0
SerialNumber1 db "12345678",0
regNumber1 dd 0,0
mesberr_1 db "注册不成功",0
mesbok_1 db "注册成功",0
mesbok_2 db "注册请与本程序作者联系",20h dup(0)
.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?
regbuffer1 db 512 dup(?)
err1 dd ?
ok1 dd ?
msbx1 dd ?
getdt1 dd ?
ook1 dd ?
oer1 dd ?
oapp1 dd ?
.const
IDC_EDIT2        equ 3800
IDC_EDIT3        equ 3801
IDC_BUTTON      equ 3001
IDC_EXIT        equ 3002
.code
start: mov eax, MessageBox
       mov msbx1,eax
       mov eax,GetDlgItemText
       mov getdt1,eax
     invoke GetModuleHandle, NULL
mov    hInstance,eax
invoke DialogBoxParam, hInstance, ADDR DlgName,NULL,addr DlgProc,NULL
invoke ExitProcess,eax
DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.IF uMsg==WM_INITDIALOG
     invoke SetDlgItemText,hWnd,IDC_EDIT2,ADDR SerialNumber1
      
.ELSEIF uMsg== WM_CLOSE
  invoke EndDialog, hWnd,NULL
.ELSEIF uMsg==WM_COMMAND
         
  mov edx,wParam
              mov eax,edx
   shr edx,16
   .if dx==BN_CLICKED
    .IF ax==IDC_BUTTON
                              mov eax ,offset ok_1
                              mov ok1,eax
                              mov eax,offset err_1
                              mov err1,eax
                              mov eax ,offset mesbok_1
                              mov ook1,eax
                              mov eax,offset mesberr_1
                              mov oer1,eax
                              mov eax,offset AppName
                              mov oapp1,eax
                              push 512
                              push offset regbuffer1
                              push IDC_EDIT3
                              push hWnd
                              mov eax,getdt1
                              xor eax,36h
                              push eax
                              pop edx
                              push offset loc_1
                              xor edx,36h
                              jmp edx
                              
                       ok_1:
                          pop esi   
                        mov eax, msbx1
                        xor eax,88h
                        push eax
                        pop edx
                        push MB_OK
                       mov eax, oapp1;offset AppName
                       push 0
                       xchg [esp],eax
                       push ook1            ;offset mesbok_1
                     
                        push 0
                        xor edx,88h
                        lea eax,exit_1
                        push eax
                        jmp edx

                              ;invoke GetDlgItemText,hWnd,IDC_EDIT3,ADDR regbuffer1,512
                              ;invoke MessageBox,NULL,ADDR mesbok_1,ADDR AppName,MB_OK
                              loc_1:
                              push esi
                              mov esi,offset regbuffer1
                              cld
                              lodsd
                              sub eax,30303030h
                              push eax
                              pop edx
                              lodsd
                              sub eax,30303030h
                              add eax,edx
                              sub eax,08080808h
                              pushfd
                              pop eax
                              and eax,40h
                              shr eax,4
                              mov edx,offset err1
                              add eax,edx
                              mov eax, [eax]
                              jmp eax
                       err_1:
                       err_2:     
                        pop esi   
                        mov eax, msbx1
                        xor eax,36h
                        push eax
                        pop edx
                        push MB_OK
                        push oapp1;offset AppName
                        push oer1;offset mesberr_1
                        push 0
                        xor edx,36h
                        ;call edx
                        lea eax,exit_1
                        push eax
                        jmp edx
                       ;invoke eax,NULL,ADDR mesberr_1,ADDR AppName,MB_OK
                     
                      exit_1:  invoke EndDialog, hWnd,NULL
                        invoke ExitProcess,eax
                           
                        .ELSEIF ax==IDC_EXIT
     invoke EndDialog, hWnd,NULL
    .ENDIF
   .ENDIF
              
.ELSE
  mov eax,FALSE
  ret
.ENDIF
mov eax,TRUE
ret
DlgProc endp
end start

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

guanghui91223 发表于 2013-7-14 18:34
再次表示,沙发,就是我的!!!!
Rookietp 发表于 2013-7-14 18:40
 楼主| dianziguan 发表于 2013-7-14 18:49
guanghui91223 发表于 2013-7-14 18:34
再次表示,沙发,就是我的!!!!

欢迎继续!汇编魅力无穷。
不会用鼠标的人 发表于 2013-7-14 19:13
本帖最后由 不会用鼠标的人 于 2013-7-14 20:28 编辑

这个,试试手。。。。。

知音啊,我刚刚下去了一趟,所以没有立刻回方法。
不用绕来绕去,就在:
0040109F   .  B8 F7104000   mov eax,dzg02.004010F7
004010A4   .  A3 90324000   mov dword ptr ds:[0x403290],eax
004010A9   .  B8 56114000   mov eax,dzg02.00401156
004010AE   .  A3 8C324000   mov dword ptr ds:[0x40328C],eax
004010B3   .  B8 44304000   mov eax,dzg02.00403044                   ;  注册成功
004010B8   .  A3 9C324000   mov dword ptr ds:[0x40329C],eax
004010BD      B8 39304000   mov eax,dzg02.00403039                   ;  注册不成功
004010C2   .  A3 A0324000   mov dword ptr ds:[0x4032A0],eax
004010C7   .  B8 09304000   mov eax,dzg02.00403009                   ;  注册程序,(C)电子管 2012.07.15
004010CC   .  A3 A4324000   mov dword ptr ds:[0x4032A4],eax
动一下手脚就好了。。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x
qq5546680 发表于 2013-7-14 19:22
不知道这样可不可以 修改寄存器还不会改

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x
 楼主| dianziguan 发表于 2013-7-14 20:21
qq5546680 发表于 2013-7-14 19:22
不知道这样可不可以 修改寄存器还不会改

美中不足,注册码正确时崩溃了,试试输入88880000.
zzmaster 发表于 2013-7-15 01:23
希望每课前把上一课的破解步骤给出来最好!
 楼主| dianziguan 发表于 2013-7-15 08:07
zzmaster 发表于 2013-7-15 01:23
希望每课前把上一课的破解步骤给出来最好!

好建议,第一篇的相关源码我已经贴上了。
qiusuo 发表于 2013-7-15 08:25
都是高手啊
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-28 12:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表