吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 14842|回复: 11
收起左侧

[原创] 极速MP4视频格式转换器 注册码分析

  [复制链接]
Y4Ng 发表于 2012-5-3 21:53
本帖最后由 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:[EBP-8]
004C1DA3  |.  8D55 FC       LEA EDX,DWORD PTR SS:[EBP-4]
004C1DA6  |.  E8 296DF4FF   CALL 00408AD4
004C1DAB  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
004C1DAE  |.  50            PUSH EAX
004C1DAF  |.  8D55 EC       LEA EDX,DWORD PTR SS:[EBP-14]
004C1DB2  |.  8B86 04030000 MOV EAX,DWORD PTR DS:[ESI+304]
004C1DB8  |.  E8 6354FAFF   CALL 00467220                            ;  取用户名
004C1DBD  |.  8B45 EC       MOV EAX,DWORD PTR SS:[EBP-14]
004C1DC0  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
004C1DC3  |.  E8 0C6DF4FF   CALL 00408AD4
004C1DC8  |.  8B55 F0       MOV EDX,DWORD PTR SS:[EBP-10]
004C1DCB  |.  8D4D F4       LEA ECX,DWORD PTR SS:[EBP-C]
004C1DCE  |.  8BC6          MOV EAX,ESI
004C1DD0  |.  E8 EBFCFFFF   CALL 004C1AC0                            ;  这个CALL生成真注册码 F7进入
004C1DD5  |.  8B55 F4       MOV EDX,DWORD PTR SS:[EBP-C]
F7进入004C1DD0 CALL 004C1AC0   
以下直接看注释!
004C1B0C  |> /8D4D EC       /LEA ECX,DWORD PTR SS:[EBP-14]
004C1B0F  |. |8B45 FC       |MOV EAX,DWORD PTR SS:[EBP-4]
004C1B12  |. |0FB64418 FF   |MOVZX EAX,BYTE PTR DS:[EAX+EBX-1]
004C1B17  |. |33D2          |XOR EDX,EDX
004C1B19  |. |E8 3273F4FF   |CALL 00408E50                           ;  hex4Uname = 把用户名转换成十六进制
004C1B1E  |. |8B55 EC       |MOV EDX,DWORD PTR SS:[EBP-14]
004C1B21  |. |8D45 F8       |LEA EAX,DWORD PTR SS:[EBP-8]
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:[EBP-8]
004C1B43  |. |E8 A42AF4FF   |CALL 004045EC
004C1B48  |. |2BC3          |SUB EAX,EBX
004C1B4A  |. |8B55 F8       |MOV EDX,DWORD PTR SS:[EBP-8]
004C1B4D  |. |8A1402        |MOV DL,BYTE PTR DS:[EDX+EAX]            ;  reOrdHex4Uname = 逆序用户名的ASCII码的每一位
004C1B50  |. |8D45 E8       |LEA EAX,DWORD PTR SS:[EBP-18]
004C1B53  |. |E8 A029F4FF   |CALL 004044F8
004C1B58  |. |8B55 E8       |MOV EDX,DWORD PTR SS:[EBP-18]
004C1B5B  |. |8D45 F4       |LEA EAX,DWORD PTR SS:[EBP-C]
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:[EBP-C]             ;  key = 取string2的前八位
004C1B8E  |.  E8 B92CF4FF   CALL 0040484C
004C1B93  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]             ;  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:[EBP-C]             ;  key2 = key的后四位
004C1BD2  |.  E8 152AF4FF   CALL 004045EC
004C1BD7  |.  83F8 04       CMP EAX,4                                ;  判断key2是否大于4
004C1C0B  |> \8D45 F0       LEA EAX,DWORD PTR SS:[EBP-10]            ;  ↓↓↓下面的是一个字符串常量 下面称为mp4str
004C1C0E  |.  BA 981C4C00   MOV EDX,004C1C98                         ;  mp46687i686c
004C1C13  |.  E8 9027F4FF   CALL 004043A8
004C1C18  |.  8D45 DC       LEA EAX,DWORD PTR SS:[EBP-24]
004C1C1B  |.  50            PUSH EAX
004C1C1C  |.  B9 04000000   MOV ECX,4
004C1C21  |.  BA 01000000   MOV EDX,1
004C1C26  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]
004C1C29  |.  E8 1E2CF4FF   CALL 0040484C
004C1C2E  |.  FF75 DC       PUSH DWORD PTR SS:[EBP-24]               ;  mp4str的前四位
004C1C31  |.  68 B01C4C00   PUSH 004C1CB0                            ;  -
004C1C36  |.  FF75 F8       PUSH DWORD PTR SS:[EBP-8]                ;  key1
004C1C39  |.  8D45 D8       LEA EAX,DWORD PTR SS:[EBP-28]
004C1C3C  |.  50            PUSH EAX
004C1C3D  |.  B9 05000000   MOV ECX,5
004C1C42  |.  BA 05000000   MOV EDX,5
004C1C47  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]
004C1C4A  |.  E8 FD2BF4FF   CALL 0040484C
004C1C4F  |.  FF75 D8       PUSH DWORD PTR SS:[EBP-28]               ;  mp4str的5位至9位
004C1C52  |.  68 B01C4C00   PUSH 004C1CB0                            ;  -
004C1C57  |.  FF75 F4       PUSH DWORD PTR SS:[EBP-C]                ;  key2
004C1C5A  |.  8BC7          MOV EAX,EDI                              ;  ↑↑↑以上就可以组成正确的注册码了。
至此注册码已经分析完成。

输入分析出来的注册码将会发现,这次没有提示注册码错误了,
但是在帮助文件-关于里面可以看到这只是一个Demo版本。


而且标题栏还有“(试用版只能转换源文件30秒的时间!)”
搜索字符串,
004C60C3   .  80B8 A5050000>CMP BYTE PTR DS:[EAX+5A5],0              ;  此处cmp,判断下面的je是否跳转
004C60CA   .  74 29         JE SHORT 004C60F5
004C60CC   .  8D55 B0       LEA EDX,DWORD PTR SS:[EBP-50]
004C60CF   .  A1 38DE4D00   MOV EAX,DWORD PTR DS:[4DDE38]
004C60D4   .  E8 4711FAFF   CALL 00467220
004C60D9   .  8D45 B0       LEA EAX,DWORD PTR SS:[EBP-50]
004C60DC   .  BA B8674C00   MOV EDX,004C67B8                         ;  (试用版只能转换源文件30秒的时间!)
004C60E1   .  E8 0EE5F3FF   CALL 004045F4
004C60C3   .  80B8 A5050000>CMP BYTE PTR DS:[EAX+5A5],0              ;  此处cmp,判断下面的je是否跳转
按F2下断点,用OD重新载入软件, F9运行,停在004C60C3
在信息栏可以看到
DS:[00A62CB5]=01

6433687.png

右键它,跟随地址到数据窗口
选中00A62CB5地址的“01” 下硬件写入Byte断点。
按Ctrl+F2重新开始。
按两次F9运行,
004C5D7F   .  C680 A5050000>MOV BYTE PTR DS:[EAX+5A5],0              ;  此时把“1”传给00A62CB5,就是Demo版本,如果把“0”传给00A62CB5,就是正式版。
004C5D86   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]             ;  按两次F9停在这里
所以修改
004C5D7F  MOV BYTE PTR DS:[EAX+5A5],1
为
004C5D7F  MOV BYTE PTR DS:[EAX+5A5],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[0:8]
    print("key is:mp46-%s%s%s%s687i6-%s%s%s%s" % (key[0], key[1], key[2], key[3], key[4], key[5], key[6], key[7]))
def main():
  username = raw_input("Please enter username(Length>=4):")
  JiSuMp4(username)
if __name__ == '__main__':
main()
TM截图未命名.png


http://115.com/file/dpp7zhp9#极速mp4视频格式转换器吾爱专版.7z

免费评分

参与人数 2热心值 +2 收起 理由
xheonen + 1 欢迎分析讨论交流,[吾爱破解论坛]有你更精.
Chief + 1 欢迎分析讨论交流,[吾爱破解论坛]有你更精.

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Chief 发表于 2012-5-3 21:57
继续给力,期待下一次分析。

点评

多谢您的支持!  发表于 2012-5-3 21:58
tk86935367 发表于 2012-5-3 22:09
a363123626 发表于 2012-5-3 22:17
a070458 发表于 2012-5-3 22:20
感谢分享 期待下一期
kino 发表于 2012-5-4 00:42
不错  留着以后学习
fuxz2010 发表于 2012-5-4 00:47
不错的教程,很详细很全面,赞
seamac 发表于 2012-5-4 08:27
非常不错,支持一个 继续学习
老海 发表于 2012-5-4 08:48
希望有这样更多的分析贴子。
qzy0549 发表于 2012-5-4 12:59
本帖最后由 qzy0549 于 2012-5-4 14:04 编辑

相当给力的分析啊 谢谢了 学到很多了!!!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 15:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表