极速MP4视频格式转换器 注册码分析
本帖最后由 Y4Ng 于 2012-5-6 21:23 编辑使用工具:Peid,OllyDbg,Python
说明:本方法使用于极速软件的各种格式转换器,其他软件的方法和本方法类同。
Peid 查壳,无壳,语言:Borland Delphi 6.0 - 7.0
OD载入mp4.exe,F9运行,弹出试用或者输入注册码的窗口,
软件注册-用假注册码去试试有什么提示,
弹出“注册码错误,请重新输入用户名和注册码!”的对话框
OD中搜索字符串注册码错误,找到上面的提示,双击。停在004C1FA8
004C1FA1 > \6A 40 PUSH 40
004C1FA3 .68 C4204C00 PUSH 004C20C4 ;register
004C1FA8 .68 D0204C00 PUSH 004C20D0 ;注册码错误,请重新输入用户名和注册码!
向上观察反汇编代码
004C1EB9 .E8 B2FEFFFF CALL 004C1D70 ;注册码在这个CALL里面 F7
004C1EBE .84C0 TEST AL,AL
004C1EC0 .0F84 DB000000 JE 004C1FA1 ;关键跳,如果成功跳转,就跳到注册码错误
在004C1EB9 CALL 004C1D70下断点,再次用假注册码试着注册一下,OD断在004C1EB9 CALL 004C1D70处F7进入这个CALL ,
...
004C1D9B|.E8 8054FAFF CALL 00467220 ;取假注册码
004C1DA0|.8B45 F8 MOV EAX,DWORD PTR SS:
004C1DA3|.8D55 FC LEA EDX,DWORD PTR SS:
004C1DA6|.E8 296DF4FF CALL 00408AD4
004C1DAB|.8B45 FC MOV EAX,DWORD PTR SS:
004C1DAE|.50 PUSH EAX
004C1DAF|.8D55 EC LEA EDX,DWORD PTR SS:
004C1DB2|.8B86 04030000 MOV EAX,DWORD PTR DS:
004C1DB8|.E8 6354FAFF CALL 00467220 ;取用户名
004C1DBD|.8B45 EC MOV EAX,DWORD PTR SS:
004C1DC0|.8D55 F0 LEA EDX,DWORD PTR SS:
004C1DC3|.E8 0C6DF4FF CALL 00408AD4
004C1DC8|.8B55 F0 MOV EDX,DWORD PTR SS:
004C1DCB|.8D4D F4 LEA ECX,DWORD PTR SS:
004C1DCE|.8BC6 MOV EAX,ESI
004C1DD0|.E8 EBFCFFFF CALL 004C1AC0 ;这个CALL生成真注册码 F7进入
004C1DD5|.8B55 F4 MOV EDX,DWORD PTR SS:
F7进入004C1DD0 CALL 004C1AC0
以下直接看注释!
004C1B0C|> /8D4D EC /LEA ECX,DWORD PTR SS:
004C1B0F|. |8B45 FC |MOV EAX,DWORD PTR SS:
004C1B12|. |0FB64418 FF |MOVZX EAX,BYTE PTR DS:
004C1B17|. |33D2 |XOR EDX,EDX
004C1B19|. |E8 3273F4FF |CALL 00408E50 ;hex4Uname = 把用户名转换成十六进制
004C1B1E|. |8B55 EC |MOV EDX,DWORD PTR SS:
004C1B21|. |8D45 F8 |LEA EAX,DWORD PTR SS:
004C1B24|. |E8 CB2AF4FF |CALL 004045F4
004C1B29|. |43 |INC EBX
004C1B2A|. |4E |DEC ESI
004C1B2B|.^\75 DF \JNZ SHORT 004C1B0C
004C1B40|> /8B45 F8 /MOV EAX,DWORD PTR SS:
004C1B43|. |E8 A42AF4FF |CALL 004045EC
004C1B48|. |2BC3 |SUB EAX,EBX
004C1B4A|. |8B55 F8 |MOV EDX,DWORD PTR SS:
004C1B4D|. |8A1402 |MOV DL,BYTE PTR DS: ;reOrdHex4Uname = 逆序用户名的ASCII码的每一位
004C1B50|. |8D45 E8 |LEA EAX,DWORD PTR SS:
004C1B53|. |E8 A029F4FF |CALL 004044F8
004C1B58|. |8B55 E8 |MOV EDX,DWORD PTR SS:
004C1B5B|. |8D45 F4 |LEA EAX,DWORD PTR SS:
004C1B5E|. |E8 912AF4FF |CALL 004045F4
004C1B63|. |43 |INC EBX
004C1B64|. |4E |DEC ESI
004C1B65|.^\75 D9 \JNZ SHORT 004C1B40
004C1B80|.50 PUSH EAX
004C1B81|.B9 04000000 MOV ECX,4
004C1B86|.BA 05000000 MOV EDX,5
004C1B8B|.8B45 F4 MOV EAX,DWORD PTR SS: ;key = 取string2的前八位
004C1B8E|.E8 B92CF4FF CALL 0040484C
004C1B93|.8B45 F8 MOV EAX,DWORD PTR SS: ;key1 = key的前四位
004C1B96|.E8 512AF4FF CALL 004045EC
004C1B9B|.83F8 04 CMP EAX,4 ;判断key1是否大于4
004C1B9E|.7D 2F JGE SHORT 004C1BCF
004C1BCF|> \8B45 F4 MOV EAX,DWORD PTR SS: ;key2 = key的后四位
004C1BD2|.E8 152AF4FF CALL 004045EC
004C1BD7|.83F8 04 CMP EAX,4 ;判断key2是否大于4
004C1C0B|> \8D45 F0 LEA EAX,DWORD PTR SS: ;↓↓↓下面的是一个字符串常量 下面称为mp4str
004C1C0E|.BA 981C4C00 MOV EDX,004C1C98 ;mp46687i686c
004C1C13|.E8 9027F4FF CALL 004043A8
004C1C18|.8D45 DC LEA EAX,DWORD PTR SS:
004C1C1B|.50 PUSH EAX
004C1C1C|.B9 04000000 MOV ECX,4
004C1C21|.BA 01000000 MOV EDX,1
004C1C26|.8B45 F0 MOV EAX,DWORD PTR SS:
004C1C29|.E8 1E2CF4FF CALL 0040484C
004C1C2E|.FF75 DC PUSH DWORD PTR SS: ;mp4str的前四位
004C1C31|.68 B01C4C00 PUSH 004C1CB0 ;-
004C1C36|.FF75 F8 PUSH DWORD PTR SS: ;key1
004C1C39|.8D45 D8 LEA EAX,DWORD PTR SS:
004C1C3C|.50 PUSH EAX
004C1C3D|.B9 05000000 MOV ECX,5
004C1C42|.BA 05000000 MOV EDX,5
004C1C47|.8B45 F0 MOV EAX,DWORD PTR SS:
004C1C4A|.E8 FD2BF4FF CALL 0040484C
004C1C4F|.FF75 D8 PUSH DWORD PTR SS: ;mp4str的5位至9位
004C1C52|.68 B01C4C00 PUSH 004C1CB0 ;-
004C1C57|.FF75 F4 PUSH DWORD PTR SS: ;key2
004C1C5A|.8BC7 MOV EAX,EDI ;↑↑↑以上就可以组成正确的注册码了。
至此注册码已经分析完成。
输入分析出来的注册码将会发现,这次没有提示注册码错误了,
但是在帮助文件-关于里面可以看到这只是一个Demo版本。
而且标题栏还有“(试用版只能转换源文件30秒的时间!)”
搜索字符串,
004C60C3 .80B8 A5050000>CMP BYTE PTR DS:,0 ;此处cmp,判断下面的je是否跳转
004C60CA .74 29 JE SHORT 004C60F5
004C60CC .8D55 B0 LEA EDX,DWORD PTR SS:
004C60CF .A1 38DE4D00 MOV EAX,DWORD PTR DS:
004C60D4 .E8 4711FAFF CALL 00467220
004C60D9 .8D45 B0 LEA EAX,DWORD PTR SS:
004C60DC .BA B8674C00 MOV EDX,004C67B8 ;(试用版只能转换源文件30秒的时间!)
004C60E1 .E8 0EE5F3FF CALL 004045F4
在
004C60C3 .80B8 A5050000>CMP BYTE PTR DS:,0 ;此处cmp,判断下面的je是否跳转
按F2下断点,用OD重新载入软件, F9运行,停在004C60C3
在信息栏可以看到
DS:=01
右键它,跟随地址到数据窗口
选中00A62CB5地址的“01” 下硬件写入Byte断点。
按Ctrl+F2重新开始。
按两次F9运行,
004C5D7F .C680 A5050000>MOV BYTE PTR DS:,0 ;此时把“1”传给00A62CB5,就是Demo版本,如果把“0”传给00A62CB5,就是正式版。
004C5D86 .8B45 FC MOV EAX,DWORD PTR SS: ;按两次F9停在这里
所以修改
004C5D7FMOV BYTE PTR DS:,1
为
004C5D7FMOV BYTE PTR DS:,0
然后保存,再次打开就是正式版了。
提供一组可用注册码:
用户名:吾爱专版
用户名:mp46-6E0B687i6-8A7D
注册机(python)
#!/usr/bin/env python
import binascii
class JiSuMp4:
def __init__(self, userName):
self.userName = userName
print("UserName is:%s" % self.userName)
hex4Uname = binascii.b2a_hex(self.userName).upper()
reOrdHex4Uname = hex4Uname[::-1]
key = reOrdHex4Uname
print("key is:mp46-%s%s%s%s687i6-%s%s%s%s" % (key, key, key, key, key, key, key, key))
def main():
username = raw_input("Please enter username(Length>=4):")
JiSuMp4(username)
if __name__ == '__main__':
main()
http://115.com/file/dpp7zhp9#极速mp4视频格式转换器吾爱专版.7z
继续给力,期待下一次分析。 非常不错,支持一个 好东西 谢谢分享 感谢分享 期待下一期 不错留着以后学习 不错的教程,很详细很全面,赞 非常不错,支持一个 继续学习 希望有这样更多的分析贴子。 本帖最后由 qzy0549 于 2012-5-4 14:04 编辑
相当给力的分析啊 谢谢了 学到很多了!!!
页:
[1]
2