UltraEdit32 v10找注册码+去暗桩
【目 标】: UltraEdit32 v10
【工 具】:Olydbg1.1(diy版)
【任 务】:找到注册码并去除暗桩
【操作平台】:WINDOWS 2000 ADV
【作 者】:loveboom[DFCG]
【相关链接】: www.UltraEdit.com
【简要说明】:近来没有钱买U盘,也没钱上网,就在单位里翻了一下旧光盘,也就找到了这东西。.
【详细过程】:
安装运行Uedit32,并输入如下信息:
假码信息:
Name:loveboom[DFCG]
SN: 77585-52013-13520-02514
完毕后,软件告诉你,要重启来验证。那我们就用OD重新载入它.下断bpx CreateFileA再运行,这样中断几次后看到堆栈:
0012F970 014F61F8 |FileName = "C:Program FilesUltraEditUedit32.REG"
0012F974 80000000 |Access = GENERIC_READ
0012F978 00000000 |ShareMode = 0
0012F97C 0012FA9C |pSecurity = 0012FA9C
0012F980 00000003 |Mode = OPEN_EXISTING
0012F984 00000080 |Attributes = NORMAL
0012F988 00000000 hTemplateFile = NULL
也就是这里中断了
0051B162 |. 51 PUSH ECX ; |Access
0051B163 |. FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |这里就是文件名:Uedit32.reg
0051B166 |. FF15 38D45400 CALL DWORD PTR DS:[<&KERNEL32.CreateFile>; CreateFileA
0051B16C |. 83F8 FF CMP EAX,-1
0051B16F |. 75 28 JNZ SHORT Uedit32.0051B199 ; 如果CreateFileA成功的话就跳
按一会F8到这里
00448421 . 68 02010000 PUSH 102 ; /Arg2 = 00000102
00448426 . 50 PUSH EAX ; |Arg1
00448427 . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C] ; |
0044842A . E8 792D0D00 CALL Uedit32.0051B1A8 //这里进去的话就知道是ReadFile了,
0044842F . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C]
……
00448443 > /8A8C35 79FDFF>MOV CL,BYTE PTR SS:[EBP+ESI-287]
0044844A . |8A8435 78FDFF>MOV AL,BYTE PTR SS:[EBP+ESI-288]
00448451 . |FEC9 DEC CL
00448453 . |FEC8 DEC AL
00448455 . |888C35 7CFEFF>MOV BYTE PTR SS:[EBP+ESI-184],CL
0044845C . |888435 7DFEFF>MOV BYTE PTR SS:[EBP+ESI-183],AL
00448463 . |46 INC ESI
00448464 . |46 INC ESI
00448465 . |3BF7 CMP ESI,EDI
00448467 .^7E DA JLE SHORT Uedit32.00448443 //循环解密数据
00448469 . 8D85 7CFEFFFF LEA EAX,DWORD PTR SS:[EBP-184]
现在再下断bpx CreateWindowExA也就是创建窗口API函数,运行后第一次中断:
0047A73F . 53 PUSH EBX ; |Style
0047A740 . 57 PUSH EDI ; |WindowName
0047A741 . 57 PUSH EDI ; |Class
0047A742 . 53 PUSH EBX ; |ExtStyle
0047A743 . FF15 0CD85400 CALL DWORD PTR DS:[<&USER32.CreateWindow> //CreateWindowExA 中断在这里
0047A749 . A3 74DA5900 MOV DWORD PTR DS:[59DA74],EAX
0047A74E . 8D86 04050000 LEA EAX,DWORD PTR DS:[ESI+504] ; 用户名"loveboom[DFCG]"入EAX
0047A754 . 8858 10 MOV BYTE PTR DS:[EAX+10],BL
0047A757 . FF35 D8335900 PUSH DWORD PTR DS:[5933D8] ; push假码所在的地址
0047A75D . 6A 01 PUSH 1
0047A75F . 50 PUSH EAX
0047A760 . FF75 F0 PUSH DWORD PTR SS:[EBP-10]
0047A763 . E8 50DEF9FF CALL Uedit32.004185B8 ; 关键Call跟进
0047A768 . 83C4 10 ADD ESP,10
0047A76B . 85C0 TEST EAX,EAX
0047A76D . 0F84 29020000 JE Uedit32.0047A99C
……
跟进后来到这里:
004185C2 |. 57 PUSH EDI
004185C3 |. 8B7D 08 MOV EDI,DWORD PTR SS:[EBP+8] ; EDI="loveboom[DFCG]"
004185C6 |. 57 PUSH EDI ; push Name
004185C7 |. E8 C46F0E00 CALL Uedit32.004FF590
004185CC |. 33DB XOR EBX,EBX
004185CE |. 59 POP ECX
004185CF |. 395D 14 CMP DWORD PTR SS:[EBP+14],EBX
004185D2 |. 74 0A JE SHORT Uedit32.004185DE
004185D4 |. C705 E4335900>MOV DWORD PTR DS:[5933E4],1
004185DE |> 395D 10 CMP DWORD PTR SS:[EBP+10],EBX
004185E1 |. 0F84 25030000 JE Uedit32.0041890C
004185E7 |. 83F8 06 CMP EAX,6 ; 用户长度和6相比
004185EA |. 0F8C 1C030000 JL Uedit32.0041890C ; 这里一跳就over
004185F0 |. 8065 EC 00 AND BYTE PTR SS:[EBP-14],0
……
0041860F |. 59 POP ECX ; pop user name
00418610 |. 6A 3C PUSH 3C
00418612 |. 5E POP ESI
00418613 |. 3BC6 CMP EAX,ESI
00418615 |. 77 09 JA SHORT Uedit32.00418620
00418617 |. 57 PUSH EDI
00418618 |. E8 736F0E00 CALL Uedit32.004FF590
0041861D |. 59 POP ECX
0041861E |. 8BF0 MOV ESI,EAX ; esi=len("loveboom[DFCG]"=0xE(14)
00418620 |> 8975 F4 MOV DWORD PTR SS:[EBP-C],ESI
00418623 |. 33C9 XOR ECX,ECX
00418625 |> 8AC1 /MOV AL,CL
00418627 |. B2 03 |MOV DL,3
00418629 |. F6EA |IMUL DL
0041862B |. 2AC2 |SUB AL,DL
0041862D |. 88840D 70FFFF>|MOV BYTE PTR SS:[EBP+ECX-90],AL
00418634 |. 41 |INC ECX
00418635 |. 83F9 3D |CMP ECX,3D
00418638 |.^ 72 EB JB SHORT Uedit32.00418625
0041863A |. 56 PUSH ESI
0041863B |. 8D85 70FFFFFF LEA EAX,DWORD PTR SS:[EBP-90]
00418641 |. 57 PUSH EDI ; push 用户名
00418642 |. 50 PUSH EAX
00418643 |. E8 48730E00 CALL Uedit32.004FF990
00418648 |. 80A435 70FFFF>AND BYTE PTR SS:[EBP+ESI-90],0
00418650 |. 83C4 0C ADD ESP,0C
00418653 |. 33C9 XOR ECX,ECX
00418655 |. 4E DEC ESI
00418656 |. 6A 01 PUSH 1
00418658 |. 894D F0 MOV DWORD PTR SS:[EBP-10],ECX
0041865B |. 5A POP EDX
0041865C |. 3BF2 CMP ESI,EDX
0041865E |. 7E 3A JLE SHORT Uedit32.0041869A
00418660 |. C745 10 02000>MOV DWORD PTR SS:[EBP+10],2
00418667 |> 0FBEBC15 6FFF>/MOVSX EDI,BYTE PTR SS:[EBP+EDX-91] ; 这里开始就是一堆算法了,有兴趣的一步一步跟吧
0041866F |. 0FBE9C15 71FF>|MOVSX EBX,BYTE PTR SS:[EBP+EDX-8F]
……
算法那么长的,我没心去研究所以直接F4到下面:
004188EA |. /74 26 JE SHORT Uedit32.00418912
004188EC |. |8D85 30FFFFFF LEA EAX,DWORD PTR SS:[EBP-D0] ; 到这里就可以看到真码入eax了
004188F2 |. |50 PUSH EAX ; 真码入栈
004188F3 |. |8D45 B0 LEA EAX,DWORD PTR SS:[EBP-50] ; 假码入eax再同样入栈
004188F6 |. |50 PUSH EAX ; 假码入栈
004188F7 |. |E8 E4860E00 CALL Uedit32.00500FE0 ; 既然真假码都入栈,那这个Call就可以猜到它是进行比较的了
004188FC |. |59 POP ECX
004188FD |. |85C0 TEST EAX,EAX
这里就看到真假码了(堆栈):
0012F9F8 0012FA88 ASCII "70585-52010-03020-02510"
0012F9FC 0012FA08 ASCII "R0D3G-Y6A50-0106M-Y6R40"
……
上面那个比较Call进入后就看到这里了:
00500FE0 /$ 8B5424 04 MOV EDX,DWORD PTR SS:[ESP+4] ; 假码入edx
00500FE4 |. 8B4C24 08 MOV ECX,DWORD PTR SS:[ESP+8] ; 真码入ecx
00500FE8 |. F7C2 03000000 TEST EDX,3
00500FEE |. 75 3C JNZ SHORT Uedit32.0050102C ; 比较够不够"资格"先,不够就跳也就over了
00500FF0 |> 8B02 /MOV EAX,DWORD PTR DS:[EDX] ; 这一段就是一个一个比较了,
00500FF2 |. 3A01 |CMP AL,BYTE PTR DS:[ECX]
00500FF4 |. 75 2E |JNZ SHORT Uedit32.00501024 ; 发现不同就over了
00500FF6 |. 0AC0 |OR AL,AL
现在我们就得到了自己的正确的注册码了,其实跟过几次之后发现有一个更快的方法找到真码。方法是:在CreateFileA对uedit32.reg文件操作的下一次CreateFileA也就是操作uedit32.cfg的时候D esp+64就可以看到真码。注册码是找到了,但我们运行一次后就会发现退出时它把注册文件给删除了,也就是说有暗桩。所以我们要把这个”二五仔”给揪出来。既然它要删除文件那么我们就下bpx DeleteFileA来拦住它。注册成功后再次用OD载入并运行,再下删除文件断,下断后退出uedit,这样就可以拦下:
004487BC . 68 80000000 PUSH 80 ; /FileAttributes = NORMAL
004487C1 . FF75 F0 PUSH DWORD PTR SS:[EBP-10] ; |FileName
004487C4 . FF15 9CD45400 CALL DWORD PTR DS:[<&KERNEL32.SetFileAttributesA>] ; SetFileAttributesA
004487CA . FF75 F0 PUSH DWORD PTR SS:[EBP-10] ; /FileName
004487CD . FF15 C0D45400 CALL DWORD PTR DS:[<&KERNEL32.DeleteFileA>] ; 这里拦住了
004487D3 . A1 48D15900 MOV EAX,DWORD PTR DS:[59D148]
找到了就好办了,从NOP掉4487ca和4487cd两行。
好了,现在再试试运行没什么问题了。
【总 结】
注册信息:
Name:loveboom[DFCG]
SN:R0D3G-Y6A50-0106M-Y6R40
去暗桩:
004487CA FF 75 F0 FF 15 C0 D4 54 00 u? 涝T.裏
改为
004487CA 90 90 90 90 90 90 90 90 90 悙悙悙悙悺H裏.
献给我亲爱的DFCG,愿它能够蒸蒸日上!
Thanks:
Fly 辉仔yock、jingulong、二哥、所有曾经关心支持或帮助过我的朋友!谢谢您们!
by loveboom[DFCG]
Email:bmd2chen@tom.com
2004-3-15