当前位置:   article > 正文

一款比较简单的PDF解密工具注册码分析_ppr注册码

ppr注册码

准备工作

  1. 工具环境
    Windows7+OllyDbg+PEiD
  2. 查壳
    无壳,VB6.0程序
    在这里插入图片描述

暴力破解

OD载入文件,F9运行,点击注册按钮,弹出注册页面
在这里插入图片描述
去掉网页弹窗,字符串搜索,找到网址
在这里插入图片描述
在这里插入图片描述
内存修改网址,用00填充
在这里插入图片描述
保存文件
在这里插入图片描述
分析dump出来的文件
在这里插入图片描述
提示字符串刚才在找网址的时候见过,定位过去
在这里插入图片描述
跟踪跳转,直到找到关键跳转
在这里插入图片描述
验证一下找的对不对,再次运行程序,NOP掉关键跳转,程序注册成功。
在这里插入图片描述

算法分析

  1. 找到注册码算法位置
    注册窗口会阻塞父窗口,说明这是一个模态对话框 下API断点DialogBoxParamA/W,DialogBoxIndirectParamA/W
    程序没有断下
    获取注册码输入框内容APIGetDlgItemTextA/W也没有断下
    使用VB反编译工具查找按钮响应事件
    在这里插入图片描述
    Command1和Command2分别是确定和取消按钮
    在这里插入图片描述

使用这个工具可以查看响应函数地址,确定按钮的响应函数地址是0x4F9110
定位到响应函数,F8跟踪
在这里插入图片描述
0x4F9162处F8会运行到关键跳转断点处,也就是说这个CALL就是关键函数了,注册码计算判断都在这个函数里进行,F7单步进入,继续F8跟踪
在这里插入图片描述
观察堆栈,此处出现注册码的比较,比较完成后会把ax的值保存在[ebp-0xE8]中,接下来会判断该值是否为0,不为0对[ebp-0x34]赋值为0xFFFF,跳转到关键跳转进行判断,下面是详细的代码分析

004FB0C8 > \FF75 C4 PUSH DWORD PTR SS:[EBP-0x3C] ; "FLA873416588611047"
004FB0CB . FF75 C0 PUSH DWORD PTR SS:[EBP-0x40] ; "123456"
004FB0CE . E8 C36FF0FF CALL <JMP.&MSVBVM60.__vbaStrCmp>
004FB0D3 . F7D8 NEG EAX
004FB0D5 . 1BC0 SBB EAX,EAX
004FB0D7 . 40 INC EAX
004FB0D8 . F7D8 NEG EAX
004FB0DA . 66:8985 18FFF>MOV WORD PTR SS:[EBP-0xE8],AX ; 标志位赋值
004FB0E1 . 8D45 C0 LEA EAX,DWORD PTR SS:[EBP-0x40]
004FB0E4 . 50 PUSH EAX
004FB0E5 . 8D45 C4 LEA EAX,DWORD PTR SS:[EBP-0x3C]
004FB0E8 . 50 PUSH EAX
004FB0E9 . 6A 02 PUSH 0x2
004FB0EB . E8 946FF0FF CALL <JMP.&MSVBVM60.__vbaFreeStrList>
004FB0F0 . 83C4 0C ADD ESP,0xC
004FB0F3 . 8D45 B0 LEA EAX,DWORD PTR SS:[EBP-0x50]
004FB0F6 . 50 PUSH EAX
004FB0F7 . 8D45 B4 LEA EAX,DWORD PTR SS:[EBP-0x4C]
004FB0FA . 50 PUSH EAX
004FB0FB . 6A 02 PUSH 0x2
004FB0FD . E8 646FF0FF CALL <JMP.&MSVBVM60.__vbaFreeObjList>
004FB102 . 83C4 0C ADD ESP,0xC
004FB105 . 0FBF85 18FFFF>MOVSX EAX,WORD PTR SS:[EBP-0xE8] ; 取出保存的值
004FB10C . 85C0 TEST EAX,EAX
004FB10E . 74 0E JE SHORT PPR_1.004FB11E ; 进行判断
004FB110 . C745 FC 06000>MOV DWORD PTR SS:[EBP-0x4],0x6
004FB117 . 66:834D CC FF OR WORD PTR SS:[EBP-0x34],0xFFFF
004FB11C . EB 31 JMP SHORT PPR_1.004FB14F ; 跳转到关键跳转
004FB11E > C745 FC 09000>MOV DWORD PTR SS:[EBP-0x4],0x9
004FB125 . 8D85 F8FEFFFF LEA EAX,DWORD PTR SS:[EBP-0x108]
004FB12B . 50 PUSH EAX ; /TMPend8
004FB12C . 8D85 08FFFFFF LEA EAX,DWORD PTR SS:[EBP-0xF8] ; |
004FB132 . 50 PUSH EAX ; |TMPstep8
004FB133 . 8D45 D0 LEA EAX,DWORD PTR SS:[EBP-0x30] ; |
004FB136 . 50 PUSH EAX ; |Counter8
004FB137 . E8 4C6EF0FF CALL <JMP.&MSVBVM60.__vbaVarForNext> ; \__vbaVarForNext
004FB13C . 8985 E0FEFFFF MOV DWORD PTR SS:[EBP-0x120],EAX
004FB142 > 83BD E0FEFFFF>CMP DWORD PTR SS:[EBP-0x120],0x0
004FB149 .^ 0F85 86FEFFFF JNZ PPR_1.004FAFD5
004FB14F > C745 FC 0A000>MOV DWORD PTR SS:[EBP-0x4],0xA
004FB156 . 66:837D CC FF CMP WORD PTR SS:[EBP-0x34],0xFFFF
004FB15B . 0F85 61030000 JNZ PPR_1.004FB4C2 ; 跳转到失败
004FB161 . C745 FC 0B000>MOV DWORD PTR SS:[EBP-0x4],0xB
004FB168 . 833D B8185000>CMP DWORD PTR DS:[0x5018B8],0x0
004FB16F . 75 1B JNZ SHORT PPR_1.004FB18C
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

已经可以确定,堆栈中出现的字符串 "FLA873416588611047"就是注册码,进行验证
在这里插入图片描述
该软件的注册码是唯一的,也就不需要注册机了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/862180
推荐阅读
相关标签
  

闽ICP备14008679号