能力值:
( LV2,RANK:10 )
26 楼
大家好,看到我的文章受到大家的表扬,我很感谢!虽然,我在论坛里受到打击和冷落,可是看到大家的支持,我收到了鼓励!是的!何必要求加精呢!浪的虚名有何用!以后,我还会发表具更好的文章!
不过,我也有难题,希望大家指教:
我希望知道,在od里,软件调用软驱的命令如何得知?
原因:我最近在学习一个软件,发现这个老软件竟然调用软盘,如果没有软盘,提示错误!高手能否给点思路?我希望解除软件读取软驱,如何修改???
我已经下断了,拦截下该信息窗口
代码如下:00401000 /$ 83EC 64 SUB ESP,64
00401003 |. A1 C8B04100 MOV EAX,DWORD PTR DS:[41B0C8]
00401008 |. 8B0D CCB04100 MOV ECX,DWORD PTR DS:[41B0CC]
0040100E |. 66:8B15 D0B04>MOV DX,WORD PTR DS:[41B0D0]
00401015 |. 53 PUSH EBX
00401016 |. 894424 04 MOV DWORD PTR SS:[ESP+4],EAX
0040101A |. A0 D2B04100 MOV AL,BYTE PTR DS:[41B0D2]
0040101F |. 894C24 08 MOV DWORD PTR SS:[ESP+8],ECX
00401023 |. 8B0D B8B04100 MOV ECX,DWORD PTR DS:[41B0B8]
00401029 |. 66:895424 0C MOV WORD PTR SS:[ESP+C],DX
0040102E |. 8B15 BCB04100 MOV EDX,DWORD PTR DS:[41B0BC]
00401034 |. 55 PUSH EBP
00401035 |. 56 PUSH ESI
00401036 |. 57 PUSH EDI
00401037 |. 884424 1A MOV BYTE PTR SS:[ESP+1A],AL
0040103B |. A1 C0B04100 MOV EAX,DWORD PTR DS:[41B0C0]
00401040 |. 894C24 1C MOV DWORD PTR SS:[ESP+1C],ECX
00401044 |. 66:8B0D C4B04>MOV CX,WORD PTR DS:[41B0C4]
0040104B |. 895424 20 MOV DWORD PTR SS:[ESP+20],EDX
0040104F |. 8A15 C6B04100 MOV DL,BYTE PTR DS:[41B0C6]
00401055 |. 33DB XOR EBX,EBX
00401057 |. 68 F4FF0000 PUSH 0FFF4 ; /MemSize = FFF4 (65524.)
0040105C |. 6A 42 PUSH 42 ; |Flags = GHND
0040105E |. 894424 2C MOV DWORD PTR SS:[ESP+2C],EAX ; |
00401062 |. 66:894C24 30 MOV WORD PTR SS:[ESP+30],CX ; |
00401067 |. 885424 32 MOV BYTE PTR SS:[ESP+32],DL ; |
0040106B |. 66:895C24 33 MOV WORD PTR SS:[ESP+33],BX ; |
00401070 |. FF15 88224200 CALL DWORD PTR DS:[<&KERNEL32.GlobalAllo>; \GlobalAlloc
00401076 |. 3BC3 CMP EAX,EBX
00401078 |. A3 A8004200 MOV DWORD PTR DS:[4200A8],EAX
0040107D 75 0C JNZ SHORT setup.0040108B
0040107F |. 33C0 XOR EAX,EAX
00401081 |. 5F POP EDI
00401082 |. 5E POP ESI
00401083 |. 5D POP EBP
00401084 |. 5B POP EBX
00401085 |. 83C4 64 ADD ESP,64
00401088 |. C2 1000 RETN 10
0040108B |> 50 PUSH EAX ; /hMem
0040108C |. FF15 FC224200 CALL DWORD PTR DS:[<&KERNEL32.GlobalLock>; \GlobalLock
00401092 |. A3 F8FF4100 MOV DWORD PTR DS:[41FFF8],EAX
00401097 |. 395C24 7C CMP DWORD PTR SS:[ESP+7C],EBX
0040109B 74 0C JE SHORT setup.004010A9
0040109D |. 33C0 XOR EAX,EAX
0040109F |. 5F POP EDI
004010A0 |. 5E POP ESI
004010A1 |. 5D POP EBP
004010A2 |. 5B POP EBX
004010A3 |. 83C4 64 ADD ESP,64
004010A6 |. C2 1000 RETN 10
004010A9 |> 8B7424 78 MOV ESI,DWORD PTR SS:[ESP+78]
004010AD |. 68 007F0000 PUSH 7F00 ; /RsrcName = IDI_APPLICATION
004010B2 |. 53 PUSH EBX ; |hInst
004010B3 |. 895C24 54 MOV DWORD PTR SS:[ESP+54],EBX ; |
004010B7 |. C74424 58 F06>MOV DWORD PTR SS:[ESP+58],setup.00406BF0 ; |
004010BF |. 895C24 5C MOV DWORD PTR SS:[ESP+5C],EBX ; |
004010C3 |. 895C24 60 MOV DWORD PTR SS:[ESP+60],EBX ; |
004010C7 |. 897424 64 MOV DWORD PTR SS:[ESP+64],ESI ; |
004010CB |. FF15 CC234200 CALL DWORD PTR DS:[<&USER32.LoadIconA>] ; \LoadIconA
004010D1 |. 68 007F0000 PUSH 7F00 ; /RsrcName = IDC_ARROW
004010D6 |. 53 PUSH EBX ; |hInst
004010D7 |. 894424 68 MOV DWORD PTR SS:[ESP+68],EAX ; |
004010DB |. FF15 C4234200 CALL DWORD PTR DS:[<&USER32.LoadCursorA>>; \LoadCursorA
004010E1 |. 8D4C24 4C LEA ECX,DWORD PTR SS:[ESP+4C]
004010E5 |. 895C24 68 MOV DWORD PTR SS:[ESP+68],EBX
004010E9 |. 894424 64 MOV DWORD PTR SS:[ESP+64],EAX
004010ED |. 8D4424 10 LEA EAX,DWORD PTR SS:[ESP+10]
004010F1 |. 51 PUSH ECX ; /pWndClass
004010F2 |. 895C24 70 MOV DWORD PTR SS:[ESP+70],EBX ; |
004010F6 |. 894424 74 MOV DWORD PTR SS:[ESP+74],EAX ; |
004010FA |. FF15 6C234200 CALL DWORD PTR DS:[<&USER32.RegisterClas>; \RegisterClassA
00401100 |. 66:85C0 TEST AX,AX
00401103 75 25 JNZ SHORT setup.0040112A
00401105 |. 8B15 A8004200 MOV EDX,DWORD PTR DS:[4200A8]
0040110B |. 52 PUSH EDX ; /hMem => 00D20004
0040110C |. FF15 30234200 CALL DWORD PTR DS:[<&KERNEL32.GlobalUnlo>;
00401112 |. A1 A8004200 MOV EAX,DWORD PTR DS:[4200A8]
00401117 |. 50 PUSH EAX ; /hMem => 00D20004
00401118 |. FF15 F4224200 CALL DWORD PTR DS:[<&KERNEL32.GlobalFree>; \GlobalFree
0040111E |. 33C0 XOR EAX,EAX
00401120 |. 5F POP EDI
00401121 |. 5E POP ESI
00401122 |. 5D POP EBP
00401123 |. 5B POP EBX
00401124 |. 83C4 64 ADD ESP,64
00401127 |. C2 1000 RETN 10
0040112A |> 53 PUSH EBX ; /lParam
0040112B |. 56 PUSH ESI ; |hInst
0040112C |. 53 PUSH EBX ; |hMenu
0040112D |. 53 PUSH EBX ; |hParent
0040112E |. 6A 24 PUSH 24 ; |Height = 24 (36.)
00401130 |. 68 FA000000 PUSH 0FA ; |Width = FA (250.)
00401135 |. 6A 0A PUSH 0A ; |Y = A (10.)
00401137 |. 6A 0A PUSH 0A ; |X = A (10.)
00401139 |. 8D4C24 3C LEA ECX,DWORD PTR SS:[ESP+3C] ; |
0040113D |. 68 0000CF02 PUSH 2CF0000 ; |Style = WS_OVERLAPPED|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_CLIPCHILDREN|WS_SYSMENU|WS_THICKFRAME|WS_CAPTION
00401142 |. 8D5424 34 LEA EDX,DWORD PTR SS:[ESP+34] ; |
00401146 |. 51 PUSH ECX ; |WindowName
00401147 |. 52 PUSH EDX ; |Class
00401148 |. 53 PUSH EBX ; |ExtStyle
00401149 |. FF15 58234200 CALL DWORD PTR DS:[<&USER32.CreateWindow>; \CreateWindowExA
0040114F |. A3 E0014200 MOV DWORD PTR DS:[4201E0],EAX
00401154 |. 8B8C24 840000>MOV ECX,DWORD PTR SS:[ESP+84]
0040115B |. 51 PUSH ECX ; /ShowState
0040115C |. 50 PUSH EAX ; |hWnd
0040115D |. FF15 5C234200 CALL DWORD PTR DS:[<&USER32.ShowWindow>] ; \ShowWindow
00401163 |. 8B3D 64234200 MOV EDI,DWORD PTR DS:[<&USER32.LoadBitma>; USER32.LoadBitmapA
00401169 |. 68 ACB04100 PUSH setup.0041B0AC ; /setupbmp
0040116E |. 56 PUSH ESI ; |hInst
0040116F |. FFD7 CALL EDI ; \LoadBitmapA
00401171 |. 68 A0B04100 PUSH setup.0041B0A0 ; /setup0bmp
00401176 |. 56 PUSH ESI ; |hInst
00401177 |. A3 0C004200 MOV DWORD PTR DS:[42000C],EAX ; |
0040117C |. FFD7 CALL EDI ; \LoadBitmapA
0040117E |. 68 94B04100 PUSH setup.0041B094 ; /setup1bmp
00401183 |. 56 PUSH ESI ; |hInst
00401184 |. A3 E0FF4100 MOV DWORD PTR DS:[41FFE0],EAX ; |
00401189 |. FFD7 CALL EDI ; \LoadBitmapA
0040118B |. 53 PUSH EBX ; /MsgFilterMax
0040118C |. 53 PUSH EBX ; |MsgFilterMin
0040118D |. 8D5424 38 LEA EDX,DWORD PTR SS:[ESP+38] ; |
00401191 |. 8935 E8014200 MOV DWORD PTR DS:[4201E8],ESI ; |
00401197 |. 8B35 60234200 MOV ESI,DWORD PTR DS:////这里提示没有软盘信息[<&USER32.GetMessag>; |USER32.GetMessageA
能力值:
( LV2,RANK:10 )
27 楼
请参考jtfzp大侠的文章,对软盘破解我也有兴趣。
希楼主多发关于破解软盘的文章,在dos的年代里大家破解软盘的方法只是复制(含加密点),在硬盘破解的文章小之又小。
一个需软盘安装的输入法程序的免盘分析
--------------------------------------------------------------------------------
【使用工具】 w32dasm
【破解平台】 Win9x/NT/2000/XP
【软件名称】 *六元*金码输入法6.0*
【软件简介】
该软件是一种形码输入法,规则非常简单,几乎没有什么记忆量。打字时按笔划输入。按一次键输入两笔。每个字最多4码。此外,还定义了6个字根,即“钅、木、日、月、扌、口”,所以叫“六元”金码。愿意学习的请到3daK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3A6@1k6Y4A6H3i4K6u0W2x3e0t1$3i4K6u0W2j5$3!0E0i4@1f1#2i4@1p5@1i4K6R3@1i4@1f1@1i4@1t1^5i4K6S2n7i4@1f1^5i4@1u0p5i4@1u0p5i4@1f1K6i4K6R3H3i4K6R3J5
该软件采用软盘安装,安装后需要注册码才能正常使用。注册机请大虾去做,我就不参与了。(我只做了个另类的)。现在有些笔记本,甚至台式机都不用软驱了,这里我谈谈如何解决软盘的问题。
【加壳方式】 Pecompact
【破解声明】 为硬盘安装带来方便:)好的输入法需要推广啊!
--------------------------------------------------------------------------------
【破解内容】
1、先用FI查一下安装文件,发现是用PECOMPACT1.40.5压缩过的,找UNPECOMPACT1.32脱了它,脱后的文件存为unpacked.exe。
2、用w32dasm反汇编unpacked.exe,用findtext功能查找“getdrivetypea”。既然只能复制到软盘中才能安装,没有软盘就不能安装,那么安装程序可能用这个函数来检查。请看下面的代码: :0040140F 56 push esi
* Reference To: KERNEL32.GetDriveTypeA, Ord:0000h //程序中只有这一个地方使用这个函授//
|
:00401410 FF1518144100 Call dword ptr [00411418]
:00401416 83F802 cmp eax, 00000002 //调用后的返回值在eax中,与00000002作比较。把这里的2改为3吧。2表示软盘,3表示硬盘。//
:00401419 741A je 00401435 //这里如果不跳,下面就要弹出错误对话框了。//
:0040141B 53 push ebx
:0040141C 68ECCD4000 push 0040CDEC
:00401421 68BCCD4000 push 0040CDBC
:00401426 FF7508 push [ebp+08]
* Reference To: USER32.MessageBoxA, Ord:0000h
|
:00401429 FF1520154100 Call dword ptr [00411520]
:0040142F 53 push ebx
:00401430 E84B1F0000 call 00403380
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401419(C)
|
* Reference To: KERNEL32.GetVersion, Ord:0000h
|
:00401435 FF151C144100 Call dword ptr [0041141C]
:0040143B B900000080 mov ecx, 80000000
:00401440 C705B0ED400001000000 mov dword ptr [0040EDB0], 00000001
:0040144A 3BC1 cmp eax, ecx
:0040144C 7206 jb 00401454
:0040144E 891DB0ED4000 mov dword ptr [0040EDB0], ebx
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040144C(C)
|
:00401454 A0B0EA4000 mov al, byte ptr [0040EAB0]
:00401459 3C41 cmp al, 41 //这里是检测当前盘根目录下有没有LYJMX.DAT文件,如果没有就byby了。看这里,16进制的41不是字母A吗?al中保存的是当前盘符。如果在D盘运行安装程序,al的值就是字符“D”。把41改为44。16进制44就是字符D。//
:0040145B 742F je 0040148C
:0040145D 3C61 cmp al, 61
:0040145F 742B je 0040148C
:00401461 3C42 cmp al, 42
:00401463 741E je 00401483
:00401465 3C62 cmp al, 62
:00401467 741A je 00401483
:00401469 53 push ebx
:0040146A 68ECCD4000 push 0040CDEC
:0040146F 6888CD4000 push 0040CD88
:00401474 FF7508 push [ebp+08]
* Reference To: USER32.MessageBoxA, Ord:0000h
|
:00401477 FF1520154100 Call dword ptr [00411520]
:0040147D 53 push ebx
:0040147E E8FD1E0000 call 00403380
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00401463(C), :00401467(C)
|
:00401483 C605A8ED400002 mov byte ptr [0040EDA8], 02
:0040148A EB07 jmp 00401493
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0040145B(C), :0040145F(C)
|
:0040148C C605A8ED400001 mov byte ptr [0040EDA8], 01
3、经过上面两处修改,然后把三个安装文件全部复制到D盘的根目录下。运行setup.exe就能安装了。(放在其它盘中安装会有警告信息。请尊重软件版权。盗版责任自负。)
至于安装后的注册,我说一点点:安装程序把用户序列号放在lyjm.mb这个码表文件中。注册后的信息也放在lyjm.mb中,只要把c7处的00改为ff就行了。注册码是明码,放在esi中。只要跟踪lyjm.ime就能得到。至于注册机,就请高手来吧。
4、问个问题,这个东西如何用OD来调试呢?lyjm.ime是dll文件,我只会在98中用trw2000来调试。还请高手指点
能力值:
( LV2,RANK:10 )
28 楼
呵呵,这个方法我经常使用,对付了N个VB程序,其实修改VB字符串的软件很多,我用getvbres0。8的就是不能保存,后来在汉化新世纪找了个基本相同的工具。
能力值:
( LV2,RANK:10 )
29 楼
getvbres 用0.51的不错,有算号器.
能力值:
( LV2,RANK:10 )
35 楼
都是些牛人啊,多多学习没有坏处!
能力值:
( LV2,RANK:10 )
40 楼
不懂,我用了GetVBRes 也是无法修改资源???/
能力值:
( LV2,RANK:10 )
41 楼
我也没说哪里难,下面是我写的一个 CrackMe,你能搞定,你强
http://bbs.pediy.com/showthread.php?s=&threadid=30049
能力值:
( LV2,RANK:10 )
44 楼
这个文章怎么没有了.,到那里去了,作者是不是重新要发一下啊.