这个打印软件网上有人出160元求破解,我下到我的网盘了——http://www.brsbox.com/filebox/down/fc/4b9dff087f0d9a065069dcd40949df1f/rand/1713786436
好了,废话少说,开始:
PE查壳是ASPack 2.12 -> Alexey Solodovnikov,工具直接脱壳!
OD载入脱了壳的程序,查找字符串:
00494865 MOV EDX,Unpacked.00494970 已注册版本
004948AD MOV EDX,Unpacked.00494984 到期日期:
004948C7 MOV EDX,Unpacked.00494998 未注册版本
004948FC MOV EDX,Unpacked.004949AC 3
0049492A MOV EDX,Unpacked.004949B8 2
双击“已注册版本”进入:00494852 |. E8 35FCFFFF CALL Unpacked.0049448C
00494857 |. E8 6CFEFFFF CALL Unpacked.004946C8
0049485C |. 803D 70AF4900>CMP BYTE PTR DS:[49AF70],0
00494863 |. 74 62 JE SHORT Unpacked.004948C7 ;关键跳,相等就直接跳到 “未注册版本”
00494865 |. BA 70494900 MOV EDX,Unpacked.00494970 ; 已注册版本
0049486A |. 8BC3 MOV EAX,EBX
0049486C |. E8 2793FAFF CALL Unpacked.0043DB98
00494871 |. 8B15 7CAF4900 MOV EDX,DWORD PTR DS:[49AF7C]
00494877 |. 8B83 F4020000 MOV EAX,DWORD PTR DS:[EBX+2F4]
0049487D |. E8 1693FAFF CALL Unpacked.0043DB98
00494882 |. 8B15 78AF4900 MOV EDX,DWORD PTR DS:[49AF78]
00494888 |. 8B83 FC020000 MOV EAX,DWORD PTR DS:[EBX+2FC]
0049488E |. E8 0593FAFF CALL Unpacked.0043DB98
00494893 |. FF35 84AF4900 PUSH DWORD PTR DS:[49AF84] ; /Arg2 = 00000000
00494899 |. FF35 80AF4900 PUSH DWORD PTR DS:[49AF80] ; |Arg1 = 00000000
0049489F |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8] ; |
004948A2 |. E8 3165F7FF CALL Unpacked.0040ADD8 ; \Unpacked.0040ADD8
004948A7 |. 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8]
004948AA |. 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
004948AD |. BA 84494900 MOV EDX,Unpacked.00494984 ; 到期日期:
004948B2 |. E8 81FDF6FF CALL Unpacked.00404638
004948B7 |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
004948BA |. 8B83 08030000 MOV EAX,DWORD PTR DS:[EBX+308]
004948C0 |. E8 D392FAFF CALL Unpacked.0043DB98
004948C5 |. EB 7A JMP SHORT Unpacked.00494941
004948C7 |> BA 98494900 MOV EDX,Unpacked.00494998 ; 未注册版本
004948CC |. 8BC3 MOV EAX,EBX
直接爆破吧!00494863的JE→JNZ,为了避免遗漏,接着往下看,发现问题了。尽管显示注册,但程序还是会显示到期日期:1999。当然不行,
把“到期日期”的前2行NOP掉看看:
004948A2 |. E8 3165F7FF CALL Unpacked.0040ADD8 ; \Unpacked.0040ADD8
004948A7 90 NOP
004948A8 90 NOP
004948A9 90 NOP
004948AA 90 NOP
004948AB 90 NOP
004948AC 90 NOP
004948AD |. BA 84494900 MOV EDX,Unpacked.00494984 ; 到期日期:
004948B2 |. E8 81FDF6FF CALL Unpacked.00404638
正如我们所希望的不显示了。
继续搜索字符串往下看:
00495A59 PUSH Unpacked.00495AD4 Warning未注册版本,只能打印固定信息
00495A5E PUSH Unpacked.00495ADC 未注册版本,只能打印固定信息
双击“Warning未注册版本,只能打印固定信息”进入:
00495A4D > \A1 28914900 MOV EAX,DWORD PTR DS:[499128]
00495A52 . 8038 00 CMP BYTE PTR DS:[EAX],0
00495A55 . 75 1A JNZ SHORT Unpacked.00495A71 ; 关键跳,不相等就跳向“打印完成”,此处与第1处的JE作用正好相反
00495A57 . 6A 30 PUSH 30
00495A59 . 68 D45A4900 PUSH Unpacked.00495AD4 ; Warning未注册版本,只能打印固定信息
00495A5E . 68 DC5A4900 PUSH Unpacked.00495ADC ; 未注册版本,只能打印固定信息
00495A63 . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00495A66 . E8 5DE9FAFF CALL Unpacked.004443C8
00495A6B . 50 PUSH EAX ; |hOwner
00495A6C . E8 AB17F7FF CALL <JMP.&user32.MessageBoxA> ; \MessageBoxA
00495A71 > 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00495A74 . E8 EB000000 CALL Unpacked.00495B64
00495A79 . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00495A7C . 8B80 78030000 MOV EAX,DWORD PTR DS:[EAX+378]
00495A82 . 8B40 38 MOV EAX,DWORD PTR DS:[EAX+38]
00495A85 . 50 PUSH EAX ; /hFile
00495A86 . E8 110FF7FF CALL <JMP.&kernel32.FlushFileBuffers> ; \FlushFileBuffers
00495A8B . 6A 40 PUSH 40
00495A8D . 68 FC5A4900 PUSH Unpacked.00495AFC ; Information打印完成
00495A92 . 68 085B4900 PUSH Unpacked.00495B08 ; 打印完成
直接爆破00495A55 处的JNZ→JMP或JE。好,至此程序应该修改完毕了!
〔最讨厌修改了一处,再去运行程序,回过头来再修改一处,一个字烦!
〕
将所修改的地方一一保存。运行程序,显示“已注册”,无日期限制,无“未注册版本,只能打印固定信息”的提示
本人菜鸟,初次写原创,有不足之处望大家指正!
[课程]Linux pwn 探索篇!