《逆向分析-使用关键字进行功能破解》
2020-12-04 15:58:01 Author: forum.90sec.com(查看原文) 阅读量:433 收藏

只是学习交流讨论,切勿其它用途。

此次分享以实际案例进行讲解,涉及:

  • 暴力破解
  • 真实注册码寻找
  • 注册机编写
  • 去除软件暗桩等知识点

x64dbg

Windows 的开源二进制调试器,用于恶意软件分析和对没有源代码的可执行文件进行反向工程。

Winhex

WinHex 本质上是一个通用十六进制编辑器。专为最低级别的数据处理而设计,作为计算机系统犯罪学(取证)调查的多功能工具,用于数据恢复和 IT 安全 - 在日常使用和紧急情况中。

keymaker2

KeyMake是一款功能强大的注册机编写器,该软件采用汇编模板为核心,可方便用户省去复杂的指令算法,从而快速制作出所需的注册机!

OllyDbg

Ollydbg是一款专业的反汇编调试工具,主要用于一些应用程序的编译操作,软件最擅长分析函数过程、循环语句、API调用、函数中参数的数目和import表等等

此节讲解如何通过修改汇编代码来跳过程序验证部分(俗称打补丁)的形式来过掉程序的最终校验

  • 所用工具:
    x64dbg
    外加中文搜索插件(简体中文关键字:需搜索中文字符串)
  • 将要分析的程序用x64dbg载入
    image
  • 点击x64dbg运行按钮,运行程序,让其运行,使其可载入更多的信息用于分析,之后使用字符串搜索工具进行搜索
    image
  • 根据关键字查找有用信息
    image

    发现一些注册判断跳转,并在跳转处下断点,使其可以中断进行分析
  • 注册信息没有填写齐全判断
    image
00510465 | 74 1A                    | je jzyq.510481                          |
00510467 | 8D95 70FFFFFF            | lea edx,dword ptr ss:[ebp-90]           |
0051046D | 8B83 10030000            | mov eax,dword ptr ds:[ebx+310]          |
00510473 | E8 B80BF3FF              | call jzyq.441030                        |
00510478 | 83BD 70FFFFFF 00         | cmp dword ptr ss:[ebp-90],0             |
0051047F | 75 0F                    | jne jzyq.510490                         |
00510481 | B8 A4065100              | mov eax,jzyq.5106A4                     | 5106A4:"注册信息没有填写齐全

想不管输入什么都不提示“注册信息没有填写齐全”这个提示就要使00510465处的跳转不成立,
因原je为等于转移,但出现不等于时跳转不执行,故需二进制编辑废除此跳转, 0051047F处的跳转成立,因原jne为不等于转移,但出现不等于时跳转不执行,故需将其修改为jmp无条件转移指令

image

注意:因之前在je指令处下载过断点,若想修改指令需删除此处断点

  • 注册码正确,感谢你的注册!判断
    image
00510543 | 0F85 A3000000            | jne jzyq.5105EC                         |
00510549 | B8 D0065100              | mov eax,jzyq.5106D0                     | 5106D0:"注册码正确,感谢你的注册!"

想不管输入什么都提示“注册码正确,感谢你的注册!”这个提示就要使00510543处的跳转不成立,
因原jne为不等于时转移,但出现等于时跳转不执行,故需二进制编辑废除此跳转

image

注意:此方法废除跳转指令后,其背景颜色变灰,显示信息为跳转不会执行

  • 运行测试
    修改完毕,填写任意注册信息,点击注册
    image

    填写任意信息,提示注册成功,显示已注册

思路:在软件运行时监测内存数据,查询是否有敏感或可利用信息
所用工具:Winhex

  • 运行软件点击注册
    订单号:112233
    注册码:china123study
    image
  • 打开Winhex进行分析
    image
    image
点击工具—打开RAM内存—选择要查询的程序(jzyq)程序,字符串搜索(快捷键:Ctrl + F):china123study,开始未找到重点,F3继续查找看到关键点:036j5u499~f6242!,测试重新注册提示注册成功
得出如下正确注册信息
订单号:112233
注册码:036j5u499~f6242!
总结:程序根据输入的订单号在算出正确的注册码,并于输入的注册码进行对比相等提示注册成功反之注册失败

在关键判断("注册码正确,感谢你的注册!")处发现EDX存在正确的注册码与所输入的注册码进行对比,导致正确的注册码泄露,根据这一特点读取EDX数据,利用软件自身算码机制计算出正确的注册码并调取使用
所用工具:x64dbg、keymaker2

0051053E | E8 D546EFFF              | call jzyq.404C18

image

  • 使用生成的注册机在内存数据中读取出正确的注册码
    image

所用工具:x64dbg、od、winhex

0040959B  |.  E8 9CDAFFFF   CALL    <JMP.&kernel32.DeleteFileA>      ; \DeleteFileA

image

00409590  /$  53            PUSH    EBX
00409591  |.  8BD8          MOV     EBX, EAX
00409593  |.  8BC3          MOV     EAX, EBX
00409595  |.  E8 32B7FFFF   CALL    jzyq.00404CCC
0040959A  |.  50            PUSH    EAX                              ; /FileName
0040959B  |.  E8 9CDAFFFF   CALL    <JMP.&kernel32.DeleteFileA>      ; \DeleteFileA
004095A0  |.  83F8 01       CMP     EAX, 0x1
004095A3  |.  1BC0          SBB     EAX, EAX
004095A5  |.  40            INC     EAX
004095A6  |.  5B            POP     EBX
004095A7  \.  C3            RETN
  • 发现有两次引用该删除功能
    image
  • 在这两次调用处下断点进行分析
	
004B01C2  |.  E8 C993F5FF    CALL    jzyq.00409590

图片描述

005181EB  |.  E8 A013EFFF    CALL    jzyq.00409590

image
先上寻找在程序入口处下个断点
image

005181CE  |.  3D D0D61C00    CMP     EAX, 0x1CD6D0

其中EAX数据未订单号的十进制信息
image

  • 关键跳转大于1CD6D0(1890000)跳转不删除注册文件,小于1CD6D0(1890000)跳转不执行删除注册文件
    image
  • 订单号需大于1CD6D0(1890000)才不会触发暗桩删除注册文件(但程序关闭时执行判断)
    解决办法:
  • 注册时填写的订单号大于1890000
  • 或修改005181D3处的关键跳转使其必跳JG改为JMP
  • 《飘云阁5.4教学视频》

请见附件
备注:PPT细节展示不是很多
《逆向分析-使用关键字进行功能破解》.part1.rar (8 MB)
《逆向分析-使用关键字进行功能破解》.part2.rar (8 MB)
《逆向分析-使用关键字进行功能破解》.part3.rar (4.8 MB)

靓图

  • 前言
    image
  • 目录
    image
  • 内容
    image

文章来源: https://forum.90sec.com/t/topic/1457/1
如有侵权请联系:admin#unsafe.sh