指纹识别技术的破解
前段时间报名参加了驾驶员培训,结果发现了一个破解指纹识别的好方法。现在什么都讲高科技,驾驶员训练当然也不例外,在训练中就采用指纹考勤机来记录学员上车的时间,达不到规定时间的学员就不能参加考试。参加培训的都知道,经常会有学员因故缺席训练。那怎么能让学员不在也可以计算时间呢?这不,教练们只花了不到10元钱就解决了这个问题。
材料:
玻璃胶(硅酮密封胶)一瓶
橡皮泥一盒
将橡皮泥搓到有点发硬的时候压平,然后在光滑的一面按上手指印,将玻璃胶挤入到手指印中,抹平,然后放置在阴凉处一段时间就行了。
就这么简单,不到10块钱就搞定了。
Related Posts
使用DeDe破解Beyond Compare 2.0.3(1)
破解工具
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的注册提示框
WinRAR在使用到期后,每次打开都会弹出如图1所示对话框窗口,十分烦人。
去除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所示:
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字符串试试,果然找到了,双击该项就可以来到相关代码处。
* 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"
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窗口
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程序破解
拿到这个程序,用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程序破解
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使用入门
首先,在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...
- 使用USB在ThinkPad X60上安装Ubuntu 8.04
- [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property...
忘记linux的root密码后......
一不小心忘记了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系统所在的分区

