指纹识别技术的破解

Posted by dohkoos on October 31st, 2009 (317 views)

前段时间报名参加了驾驶员培训,结果发现了一个破解指纹识别的好方法。现在什么都讲高科技,驾驶员训练当然也不例外,在训练中就采用指纹考勤机来记录学员上车的时间,达不到规定时间的学员就不能参加考试。参加培训的都知道,经常会有学员因故缺席训练。那怎么能让学员不在也可以计算时间呢?这不,教练们只花了不到10元钱就解决了这个问题。

材料:
玻璃胶(硅酮密封胶)一瓶
橡皮泥一盒

将橡皮泥搓到有点发硬的时候压平,然后在光滑的一面按上手指印,将玻璃胶挤入到手指印中,抹平,然后放置在阴凉处一段时间就行了。

就这么简单,不到10块钱就搞定了。

Related Posts

使用DeDe破解Beyond Compare 2.0.3(1)

Posted by dohkoos on March 27th, 2006 (726 views)

破解工具
DeDe 3.50
OllyDbg 1.10

这是一个非常好用的用来比较、同步文件和目录的工具,特别是用来比较不同版本的源程序之间的不同,应属于程序员的必备工具之一。

用DeDe载入BC2.exe,在Form面板中找到一个叫TRegisterDlg的ClassName,单击后就可以见到右边窗口中各个对象的属性及相互关系。
  ......
  object OKBtn: TButton      <-- 注册按钮
    Left = 0
    Top = 248
    Width = 73
    Height = 23
    Caption = 'OK'              <-- 按钮名字
    Default = True
    ModalResult = 2
    TabOrder = 0
    OnClick = OKBtnClick     <-- 注册按钮按下后激发的事件
  end
  ......
  object Memo: TMemo      <-- 注册码输入框
    Left = 0
    Top = 0
    Width = 297
    Height = 193
    Align = alTop
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -12
    Font.Name = 'Courier New'
    Font.Style = []
    ParentFont = False
    ScrollBars = ssVertical
    TabOrder = 2
    WantReturns = False
  end

打开Procedures面板,这里包含了Forms栏中所有窗口的事件信息,其中有
Unit Name          Class Name
--------------------------------------
bcImages           TImages
......             ......
dlgRegister        TRegisterDlg
......             ......
单击TRegisterDlg,展示此窗口内包含的所有事件,双击名为OKBtnClick的事件就可以看到

* Reference to control TRegisterDlg.Memo : TMemo
|
0431078F   8B83D8020000           mov   eax, [ebx+$02D8]

* Reference to: controls.TControl.GetText(TControl):TCaption;
|
04310795   E896A8EBFF               call     041CB030                           --> 获取Memo的内容
0431079A   837DFC00                 cmp    dword ptr [ebp-$04], +$00    --> 判断是否有字符输入
0431079E   0F84A9000000           jz       0431084D                           --> 如果没有则跳到0431084D执行退出代码
043107A4   8B55FC                     mov   edx, [ebp-$04]

* Possible String Reference to: 'Begin Key----------------------'
|
043107A7   B878083104              mov   eax, $04310878
                                                                                                   --> LStrPos 查找子串在目标字符串中的位置
* Reference to: system.@LStrPos;                                                   -->   参数 eax 子串
|                                                                                                  -->        edx 目标字符串
043107AC   E8973CE8FF              call    04194448                            -->   返回 eax
043107B1   85C0                        test   eax, eax                              --> 输入字符串是否包含“Begin Key----------------------”,
043107B3   751A                        jnz    043107CF                             -->   如果包含则输入字符串是trial key,跳到043107CF

* Possible String Reference to: '-Begin Key----------------------'
|
043107B5   68A0083104             push    $043108A0                        --> Push字符串“-Begin Key----------------------”的pointer
043107BA   FF75FC                     push    dword ptr [ebp-$04]           --> Push输入字符串的pointer

* Possible String Reference to: '------------------------End Key-'
|
043107BD   68CC083104             push   $043108CC                        --> Push字符串“------------------------End Key-”的pointer
043107C2   8D45FC                    lea      eax, [ebp-$04]
043107C5   BA03000000             mov    edx, $00000003                 --> LStrCatN 连接Ansi字符串
                                                                                                  -->   参数 eax 目标字符串
* Reference to: system.@LStrCatN;                                                 -->        edx 源字符串的个数
|                                                                                                 -->        [esp + 4 * i] 第 i 个源字符串的pointer
043107CA   E84D3AE8FF              call    0419421C                           --> 连接字符串组成如“-Begin Key----..输入字符串..---End Key-”
                                                                                                  -->   样的注册码

通过上面的程序得到注册码后,现在就要比较注册码是否正确了。

* Reference to TMySLock instance
|
0431081B   A1202B3504             mov     eax, dword ptr [$04352B20]
04310820   8B00                       mov     eax, [eax]
04310822   8B55FC                    mov     edx, [ebp-$04]

* Reference to : TSlock._PROC_04243140()
|
04310825   E81629F3FF             call    04243140                            --> 调用比较注册码的子程序
0431082A   33C0                      xor     eax, eax

双击call    04243140来到比较注册码的子程序

* Reference to field TMySLock.OFFS_00E0
|
04243167   8986E0000000         mov     [esi+$00E0], eax

* Reference to field TMySLock.OFFS_0055
|
0424316D   C6465507               mov     byte ptr [esi+$55], $07
04243171   8D45FC                   lea     eax, [ebp-$04]
04243174   8BD3                      mov     edx, ebx

* Reference to: system.@LStrLAsg;                                             --> LStrLAsg 复制Ansi字符串
|                                                                                             -->   参数 eax 目标字符串
04243176   E8E90DF5FF             call    04193F64                         -->        edx 源字符串
0424317B   8B55FC                   mov   edx, [ebp-$04]

* Possible String Reference to: 'Begin Key----------------------'
|
0424317E   B8B0322404             mov     eax, $042432B0

* Reference to: system.@LStrPos;
|
04243183   E8C012F5FF             call    04194448                            --> 在注册码中查找“Begin Key----------------------”
04243188   8BD8                   mov     ebx, eax
0424318A   85DB                   test    ebx, ebx                            --> 如果注册码包含“Begin Key----------------------”
0424318C   7516                   jnz     042431A4                            -->   就跳到042431A4

* Reference to field TMySLock.OFFS_00E0
|
0424318E   C786E000000003000000   mov     dword ptr [esi+$00E0], $00000003
04243198   8BC6                   mov     eax, esi

* Reference to : TSlock._PROC_04246F60()
|
0424319A   E8C13D0000             call    04246F60
0424319F   E9CA000000             jmp     0424326E
042431A4   8D45FC                 lea     eax, [ebp-$04]
042431A7   50                     push    eax
042431A8   8B45FC                 mov     eax, [ebp-$04]

* Reference to: system.@LStrLen:Integer;                                      --> LStrLen 得到Ansi字符串的长度
|                                                                             -->   参数 eax 目标字符串
042431AB   E8AC0FF5FF             call    0419415C                            -->   返回 eax
042431B0   8BC8                   mov     ecx, eax
042431B2   8D531F                 lea     edx, [ebx+$1F]
042431B5   8B45FC                 mov     eax, [ebp-$04]

* Reference to: system.@LStrCopy;                                             --> LStrCopy 复制指定长度的Ansi子串
|                                                                             -->   参数 eax 目标字符串
042431B8   E8A711F5FF             call    04194364                            -->        edx 起始位置
042431BD   8B55FC                 mov     edx, [ebp-$04]                      -->        ecx 要复制的长度
                                                                              -->   返回 [esp + 4]
* Possible String Reference to: '------------------------End Key-'
|
042431C0   B8D8322404             mov     eax, $042432D8

* Reference to: system.@LStrPos;
|
042431C5   E87E12F5FF             call    04194448
042431CA   85C0                   test    eax, eax
042431CC   7516                   jnz     042431E4

* Reference to field TMySLock.OFFS_00E0
|
042431CE   C786E000000004000000   mov     dword ptr [esi+$00E0], $00000004
042431D8   8BC6                   mov     eax, esi

* Reference to : TSlock._PROC_04246F60()
|
042431DA   E8813D0000             call    04246F60
042431DF   E98A000000             jmp     0424326E
042431E4   8D45FC                 lea     eax, [ebp-$04]
042431E7   50                     push    eax

* Possible String Reference to: '------------------------End Key-'
|
042431E8   B8D8322404             mov     eax, $042432D8
042431ED   8B55FC                 mov     edx, [ebp-$04]

* Reference to: system.@LStrPos;
|
042431F0   E85312F5FF             call    04194448
042431F5   8BC8                   mov     ecx, eax
042431F7   BA01000000             mov     edx, $00000001
042431FC   8B45FC                 mov     eax, [ebp-$04]

* Reference to: system.@LStrCopy;
|
042431FF   E86011F5FF             call    04194364
04243204   BF01000000             mov     edi, $00000001
04243209   8D45F8                 lea     eax, [ebp-$08]

* Reference to: system.@LStrClr(String;String);                               --> LStrClr 清空字符串
|                                                                             -->   参数 eax 字符串
0424320C   E8BB0CF5FF             call    04193ECC
04243211   EB3C                   jmp     0424324F
04243213   8B45FC                 mov     eax, [ebp-$04]
04243216   8A5C38FF               mov     bl, byte ptr [eax+edi-$01]
0424321A   8BC3                   mov     eax, ebx
0424321C   2C2B                   sub     al, $2B
0424321E   7416                   jz      04243236
04243220   2C02                   sub     al, $02
04243222   7412                   jz      04243236
04243224   04FD                   add     al, -$03
04243226   2C0A                   sub     al, $0A
04243228   720C                   jb      04243236
0424322A   04F9                   add     al, -$07
0424322C   2C1A                   sub     al, $1A
0424322E   7206                   jb      04243236
04243230   04FA                   add     al, -$06
04243232   2C1A                   sub     al, $1A
04243234   7318                   jnb     0424324E
04243236   8D45F4                 lea     eax, [ebp-$0C]
04243239   8B55FC                 mov     edx, [ebp-$04]
0424323C   8BD3                   mov     edx, ebx

* Reference to: system.@LStrFromChar(String;String;Char);
|
0424323E   E8310EF5FF             call    04194074
04243243   8B55F4                 mov     edx, [ebp-$0C]
04243246   8D45F8                 lea     eax, [ebp-$08]

* Reference to: system.@LStrCat;
|
04243249   E8160FF5FF             call    04194164
0424324E   47                     inc     edi
0424324F   8B45FC                 mov     eax, [ebp-$04]

* Reference to: system.@LStrLen:Integer;
|
04243252   E8050FF5FF             call    0419415C
04243257   3BF8                   cmp     edi, eax
04243259   7CB8                   jl      04243213
0424325B   8D8564FFFFFF           lea     eax, [ebp+$FFFFFF64]
04243261   50                     push    eax
04243262   33C9                   xor     ecx, ecx
04243264   8B55F8                 mov     edx, [ebp-$08]
04243267   8BC6                   mov     eax, esi

* Reference to: Slock.Proc_04243FEC
|
04243269   E87E0D0000             call    04243FEC                            --> 核心算法
0424326E   33C0                   xor     eax, eax
04243270   5A                     pop     edx
04243271   59                     pop     ecx
04243272   59                     pop     ecx
04243273   648910                 mov     fs:[eax], edx

****** FINALLY
|
04243276   68A1322404             push    $042432A1
0424327B   8D8564FFFFFF           lea     eax, [ebp+$FFFFFF64]

* Reference to object TCertificate
|
04243281   8B1564292404           mov     edx, [$04242964]

* Reference to: system.@FinalizeRecord;
|
04243287   E8D019F5FF             call    04194C5C
0424328C   8D45F4                 lea     eax, [ebp-$0C]
0424328F   BA03000000             mov     edx, $00000003

* Reference to: system.@LStrArrayClr;
|
04243294   E8570CF5FF             call    04193EF0
04243299   C3                     ret

(to be continued...)

Related Posts

People who read this, also read...

如何去除WinRAR 3.30的注册提示框

Posted by dohkoos on March 24th, 2006 (1,375 views)

WinRAR在使用到期后,每次打开都会弹出如图1所示对话框窗口,十分烦人。
winrar-nag.png

去除Nag窗口常用的几种方法是:
1、使用资源修改工具将可执行文件中的Nag窗口的属性改成透明、不可见,可以变相的去除Nag窗口
2、找到创建和显示Nag窗口的代码,跳过即可。显示窗口的常用函数有MessageBox, MessageBoxEx, DialogBoxParam, CreateWindowEx, CreateWindowEx, ShowWindow等
3、找到创建和显示Nag窗口的函数,更改其参数,让其调用失败就可以了
4、在Nag窗口弹出来后,给可以关闭它的BUTTON 送一个WM_COMMAND消息
5、通过静态和动态分析找到注册码

由于WinRAR未注册版本没有功能限制,用不着去找注册码注册。所以在这里可以用第二或第三种方法去掉WinRAR的注册提示窗口。

使用Resource Hacker打开WinRAR.exe,显示Nag窗口的资源如图2所示:
winrar-reminder.png

Nag窗口的ID号是1049,换算成16进制是0x419。用W32dsm8.93+.exe(http://www.pediy.com/tools/Disassemblers/W32Dasm/W32dsm8.93.rar)
打开WinRAR.exe,打开Dialog References查找Dialog:DialogID_0419,结果没找到。由图2可知Nag窗口的资源名是REMINDER,打开String Data References查找REMINDER字符串试试,果然找到了,双击该项就可以来到相关代码处。
winrar-w32dsm.png

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0043FE89(C)
|
:0043FE8F C6055037490001 mov byte ptr [00493750], 01
:0043FE96 6A00 push 00000000
:0043FE98 68143F4400 push 00443F14
:0043FE9D FF3588EC4A00 push dword ptr [004AEC88]

* Possible StringData Ref from Data Obj ->"REMINDER"
|
:0043FEA3 68C93C4900 push 00493CC9
:0043FEA8 FF3560D04900 push dword ptr [0049D060]

* Reference To: USER32.DialogBoxParamA, Ord:0000h
|
:0043FEAE E837E30400 Call 0048E1EA

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0043FE64(C), :0043FE6D(C), :0043FE76(C), :0043FE7F(C), :0043FE8D(C)
|
:0043FEB3 833DF8104B0000 cmp dword ptr [004B10F8], 00000000
:0043FEBA 752D jne 0043FEE9
:0043FEBC 833DF0104B0000 cmp dword ptr [004B10F0], 00000000
:0043FEC3 7524 jne 0043FEE9
:0043FEC5 833D08114B00FF cmp dword ptr [004B1108], FFFFFFFF
:0043FECC 741B je 0043FEE9
:0043FECE 6A0A push 0000000A
:0043FED0 FF3508114B00 push dword ptr [004B1108]

可以看到,REMINDER字符串地址是作为参数传给了DialogBoxParamA函数,而DialogBoxParamA函数正是创建对话框的API函数。这时只需将0043FEA3处的push 00493CC9改为push 0,将一个NULL传入DialogBoxParamA函数,这个函数就会调用失败。当然之后它也就不能正常显示了,就达到了去除的目的。

现在再打开WinRAR,呵呵,大功告成,再也不会有Nag窗口出来Nag我了。

Related Posts

People who read this, also read...

练习破解"Crackme2 - by CoSH"

Posted by dohkoos on November 14th, 2005 (517 views)

W32dasm 8.93
PEiD 0.8
Crackme2程序

1、用PEiD查看,程序没有加壳
2、首先找到注册错误提示信息:"One of the Details you entered was wrong"
3、用W32Dasm反汇编,利用String Data References找到注册错误提示信息"One of the Details you entered was wrong",双击它,看到以下程序:

* Reference To: MFC42.Ordinal:0F24, Ord:0F24h
|
:004014EB E85A030000              call 0040184A
:004014F0 83F805                  cmp eax, 00000005                  --> 比较Name字符串的的长度
:004014F3 7E41                    jle 00401536                       --> 如果小于等于5个字符就跳到出错信息处
:004014F5 8D86E0000000            lea eax, dword ptr [esi+000000E0]  --> Name字符串的地址
:004014FB 8BCF                    mov ecx, edi
:004014FD 50                      push eax

* Reference To: MFC42.Ordinal:0F22, Ord:0F22h
|
:004014FE E841030000              call 00401844
:00401503 8DBEE4000000            lea edi, dword ptr [esi+000000E4]  --> Serial字符串的地址
:00401509 8BCD                    mov ecx, ebp
:0040150B 57                      push edi

从004014F0到004014F3可以知道Name必须大于5个字符,且和Serial无关

* Reference To: MFC42.Ordinal:0F22, Ord:0F22h
|
:0040150C E833030000              call 00401844
:00401511 8B07                    mov eax, dword ptr [edi]
:00401513 803836                  cmp byte ptr [eax], 36
:00401516 751E                    jne 00401536                       --> 跳到出错信息处
:00401518 80780132                cmp byte ptr [eax+01], 32
:0040151C 7518                    jne 00401536                       --> 跳到出错信息处
:0040151E 80780238                cmp byte ptr [eax+02], 38
:00401522 7512                    jne 00401536                       --> 跳到出错信息处
:00401524 80780337                cmp byte ptr [eax+03], 37
:00401528 750C                    jne 00401536                       --> 跳到出错信息处
:0040152A 8078042D                cmp byte ptr [eax+04], 2D
:0040152E 7506                    jne 00401536                       --> 跳到出错信息处
:00401530 80780541                cmp byte ptr [eax+05], 41
:00401534 7417                    je 0040154D                        --> 跳到正确信息处

36(hex) = 6
32(hex) = 2
38(hex) = 8
37(hex) = 7
2D(hex) = -
41(hex) = A
所以Serial是:6287-A

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004014E4(C), :004014F3(C), :00401516(C), :0040151C(C), :00401522(C)
|:00401528(C), :0040152E(C)
|
:00401536 6A00                    push 00000000

* Possible StringData Ref from Data Obj ->"ERROR"
|
:00401538 6864304000              push 00403064

* Possible StringData Ref from Data Obj ->"One of the Details you entered was wrong"
|
:0040153D 6838304000              push 00403038
:00401542 8BCE                    mov ecx, esi

* Reference To: MFC42.Ordinal:1080, Ord:1080h
|
:00401544 E8F5020000              Call 0040183E
:00401549 6A00                    push 00000000
:0040154B FFD3                    call ebx

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401534(C)
|
:0040154D 8D8EE0000000            lea ecx, dword ptr [esi+000000E0]
:00401553 8D542414                lea edx, dword ptr [esp+14]
:00401557 51                      push ecx

* Possible StringData Ref from Data Obj ->"Well done,"
|
:00401558 682C304000              push 0040302C
:0040155D 52                      push edx

* Reference To: MFC42.Ordinal:039E, Ord:039Eh
|
:0040155E E8D5020000              Call 00401838
:00401563 683C314000              push 0040313C
:00401568 50                      push eax
:00401569 8D442418                lea eax, dword ptr [esp+18]
:0040156D C744242800000000        mov [esp+28], 00000000
:00401575 50                      push eax

* Reference To: MFC42.Ordinal:039C, Ord:039Ch
|
:00401576 E8B7020000              Call 00401832
:0040157B 8B00                    mov eax, dword ptr [eax]
:0040157D 6A00                    push 00000000

* Possible StringData Ref from Data Obj ->"YOU DID IT"
|
:0040157F 6820304000              push 00403020
:00401584 50                      push eax
:00401585 8BCE                    mov ecx, esi
:00401587 C644242C01              mov [esp+2C], 01

整理后得到:Name的长度必须大于5个字符,且和Serial无关;Serial是6287-A

小技巧:如何截取W32DASM中的汇编代码呢?很简单,在W32DASM中点击其最左边,会有一红点,再按shift键,点击另一处,选中所需范围,按CTRL+C复制到剪贴版,剩下的事就粘贴了。

Related Posts

People who read this, also read...

去除退出中国游戏中心时弹出的IE窗口

Posted by dohkoos on November 3rd, 2005 (716 views)

W32dsm 8.93+
CodeFusion 3.0
中国游戏中心0.8.011.4

中国游戏中心退出时弹出的IE窗口很烦人,修改了一下做了个补丁。

省略无数次尝试...确定退出中国游戏中心后打开的网页地址是http://www.chinagames.net/PlazaJump/open。接着用W32dasm反汇编iGame.exe,通过String Data References找到上述字符串,双击该致富春,看到以下程序:

:0043397A 90                      nop
:0043397B 90                      nop
:0043397C 90                      nop
:0043397D 90                      nop
:0043397E 90                      nop
:0043397F 90                      nop
:00433980 A1A2034800        mov eax, dword ptr [004803A2]
:00433985 56                      push esi
:00433986 85C0                  test eax, eax
:00433988 8BF1                   mov esi, ecx
:0043398A 7411                   je 0043399D                     --> 判断是否要打开IE窗口
:0043398C 6A00                   push 00000000

* Possible StringData Ref from Data Obj ->"http://www.chinagames.net/PlazaJump/open/"
|
:0043398E 6860D84700         push 0047D860
:00433993 B9D0FC4700         mov ecx, 0047FCD0
:00433998 E8B3D2FFFF          call 00430C50                   --> 打开IE窗口

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0043398A(C)
|
:0043399D 8BCE                   mov ecx, esi

从上面可以知道只要将0043398A处的je指令改成jmp就可以避免退出中国游戏中心后弹出IE窗口了。

现在使用CodeFusion来制作一个文件补丁。有三种制作补丁的方案,这里使用Find&Replace方法。将0043397A到00433998段的数据作为查找匹配数据,并将0043398A处的74(je的指令)改成eb(jmp的指令),然后按照步骤生成补丁文件就可以了。

补丁文件

2008/3/19更新:应ls的要求制作了一个针对最新版本(0.8.011.10)的补丁,和原来的补丁放在一起提供下载。

Related Posts

People who read this, also read...

Andrnalin CrackMe程序破解

Posted by dohkoos on April 6th, 2005 (460 views)

拿到这个程序,用PEiD查看这个程序,发现是用Microsoft Visual Basic 5.0编写的且没有加过壳,所以用W32dasm反汇编。开Functions/Imports查看它调用的函数,能够看见MSVBVM50!__vbaStrCmp。

1、启动softice然后运行crackme程序
2、在文本框中输入12345678
3、Ctrl+D来到softice中,输入bpx __vbaStrCmp,按回车后用Ctrl+D命令返回crackme
4、按OK,程序被softice中断
5、按F12回到调用__vbaStrCmp的地方
6、按F6切换到代码窗口,移动光标,直到代码窗口中出现如下程序段:

001B:00401D70 MOV ECX, [EBP-28]
001B:00401D73 PUSH ECX
001B:00401D74 PUSH 00401A54
001B:00401D79 CALL [MSVBVM50!__vbaStrCmp]

因此可以知道__vbaStrCmp比较的是ECX和00401A54所指向的字符串。记下00401A54这个值,然后重复步骤1、2、3、4。接着查看ecx和00401a54指向的内容就可以知道正确的key了。

d ecx 的显示如下:
0023:0013CC1C 31 00 32 00 33 00 34 00-35 00 36 00 37 00 38 00 1.2.3.4.5.6.7.8.
0023:0013CC2C 00 00 72 00 61 00 6D 00-46 00 69 00 79 00 05 00 ..r.a.m.F.i.y...

d 401a54 的显示如下:
0023:00401A54 53 00 79 00 6E 00 54 00-61 00 58 00 20 00 32 00 S.y.n.T.a.X. .2.
0023:00401A64 6F 00 6F 00 31 00 00 00-4C 00 00 00 52 00 69 00 o.o.1...L...R.i.

12345678是我们输入的key,所以正确的key是SynTaX 2oo1注意中间的空格)。

注意:如果你是在破解VB6程序,你应该在断点前加上msvbvm60!。

Related Posts

People who read this, also read...

Brad Soblesky的Crackme程序破解

Posted by dohkoos on March 26th, 2005 (467 views)

Crackme程序

这次破解参考了wind[CCG] 写的《Crackme-Brad Soblesky 的Crackme 程序破解》文章。因为我用的是windows 2000 操作系统,TRW2000 不能在windows 2000 上使用,所以我用softice 4.05 来破解。

用PEiD 查看这个程序,发现是用VC++ 6.0 编写的且没有加过壳,所以用W32dasm 反汇编。打开Functions/Imports 查看它调用的函数,能够看见KERNEL32.lstrcmpA。双击它可以看到如下程序段:

:00401585 8d4de4 lea ecx, dword ptr [ebp-1c]
:00401588 51 push ecx
:00401589 8d55f4 lea edx, dword ptr [ebp-0c]
:0040158c 52 push edx

* reference to: kernel32.lstrcmpa, ord:02fch
:0040158d ff1500204000 call dword ptr [00402000]
:00401593 85c0 test eax, eax        --> 典型的判断,肯定是这里了

:00401595 7516 jne 004015ad        --> 看见这个跳转了吗
:00401597 6a40 push 00000040

1、启动softice 然后运行crackme 程序
2、在文本框中输入78787878
3、Ctrl+D 来到softice 中,输入bpx lstrcmpA,按回车后用Ctrl+D 命令返回crackme
4、按check,程序中断
5、按F11 回到调用lstrcmpA 的地方,发现CS 寄存器的值为001b,输入bpx 001b:00401585,按回车后用Ctrl+D 命令返回crackme
6、按check,程序中断
7、F10 来到如下程序段:

:00401585 8d4de4 lea ecx, dword ptr [ebp-1c]
:00401588 51 push ecx        --> 在此处用d ecx 就可以看到注册码了
:00401589 8d55f4 lea edx, dword ptr [ebp-0c]
:0040158c 52 push edx

这个程序的注册码:<BrD-SoB>

Related Posts

People who read this, also read...

SoftICE 4.05使用入门

Posted by dohkoos on March 21st, 2005 (762 views)

首先,在VC++ 6.0中建立工程Example,建立源文件Example.c,内容如下:
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
    MessageBox(NULL, TEXT("Hello, Windows 98!"), TEXT("HelloMsg"), 0);
    return 0 ;
}
并且编译链接成可执行文件Example.exe。

接着安装SoftICE 4.05 for windows 2000,选择manual启动方式。在菜单中选择Start SoftICE快捷方式启动softice。

然后双击Example.exe可执行文件。接着按"Ctrl+D"呼叫出softice,输入bpx MessageBox后按回车键(记住:一定要按回车键啊)。如果提示“Symbol not Defined (xxxx)”,请打开WINNT\system32\winice.dat文件,将所有DLL前的分号去除,然后重新启动softice并且重复以上步骤。

最后按"Ctrl+D"返回,双击Example.exe文件,此时就会发现设置的断点被softice 中断住了。

Related Posts

People who read this, also read...

忘记linux的root密码后......

Posted by dohkoos on December 5th, 2004 (437 views)

一不小心忘记了Linux的root密码,只能以普通用户ffat的身份进入系统......

找到Linux的DISC 1安装光盘,从光盘启动,出现boot:引导符后输入
linux single root=/dev/hda3[1] initrd=
进入系统,拷贝/etc目录下的shadow和passwd文件到/home/ffat目录下,修改shadow文件的属性。
再到http://www.openwall.com/john/下载一个John the Ripper,编译安装好JP后输入
./unshadow passwd shadow > passwd.1
接着输入
john passwd.1
这样过了半个多小时我的root密码就回来了。

[1]:Linux系统所在的分区

Related Posts

People who read this, also read...