吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

领取今日签到奖励
查看: 1654|回复: 36
上一主题 下一主题

[原创] Ghidra练手爆破Sublime Text 3.2 最新版本

  [复制链接]
跳转到指定楼层
楼主
发表于 2019-3-14 21:18 回帖奖励
本帖最后由 javacafe 于 2019-3-14 21:59 编辑

       今天刷网看到 Sublime Text 3.2 新版本发出, 突然想起前几天美国安全部发布的逆向工具Ghidra,还没怎么试用,所以就想既然闲着没事何不用
练练手,想到此,说干就干。


注:Ghidra 要求使用JDK 11


1.  运行Ghidra,创建一个工程文件,然后File --> Import File 导入要逆向的文件,也就是sublime_text.exe,导入时会提示导入选择项,基本不用管直接导入。
   

2.  然后当前工程页面直接点击导入的sublime_text.exe文件,或是选中sublime_text.exe按右键选择“Open With” 中的Code Browser打开也可。
   

3.  等Ghidra分析完成,然后选择Windows菜单中的 Defined String 查看所有字符串,在字符串窗口下方的Filter输入框中输入  “license”,列出了所有
     带license的字符串。在sublime中输入注册码不正确时的提示信息是“That license key doesn't appear to be valid. Please check that you。。。”,所以
      选择这个字符串。
      

4.  在中间的机器码窗口直接定位到了该字符串的代码位置,然后直接点击其右上角的XREF地址。

   


    在转到引用地址的代码后发现还是引用,继续点XREF,然后看到像是正常逻辑的代码。

   


    然后点菜单工具栏的"Cf"样子的按纽或是按Ctrl+E,显示伪代码窗口

   


5. 简单查看伪代码
   
[C] 纯文本查看 复制代码
/* WARNING: Could not reconcile some variable overlaps */

void UndefinedFunction_1400911a8(longlong lParm1)

{
  longlong lVar1;
  longlong lVar2;
  char cVar3;
  int iVar4;
  HANDLE hObject;
  undefined8 ****ppppuVar5;
  undefined8 ****ppppuVar6;
  undefined auStack224 [32];
  int iStack192;
  undefined8 ***pppuStack184;
  undefined auStack176 [16];
  undefined auStack160 [16];
  undefined uStack144;
  undefined auStack128 [16];
  undefined8 ****appppuStack112 [2];
  longlong lStack96;
  ulonglong uStack88;
  int iStack76;
  undefined8 uStack72;
  
  uStack72 = 0xfffffffffffffffe;
  lVar1 = *(longlong *)(lParm1 + 8);
  FUN_14035762e(*(undefined8 *)(*(longlong *)(*(longlong *)(lVar1 + 0x260) + 0x130) + 0x6f8),
                &pppuStack184);
  FUN_14030c5ca(appppuStack112,&pppuStack184);
  FUN_14001f19e(&pppuStack184);
  pppuStack184 = (undefined **)(((ulonglong)pppuStack184 >> 0x10 & 0xffff) << 0x10);
  auStack160 = pslldq(ZEXT816(0xf),8);
  auStack176[0] = 0;
  uStack144 = 0;
  auStack128 = auStack160;
  FUN_14008f1a6(*(undefined8 *)(lVar1 + 0x250),&pppuStack184);
  FUN_14008ee90(&pppuStack184);
  if (lStack96 == 0) {
    FUN_14008ef8d(&pppuStack184);
    ppppuVar6 = &pppuStack184;
    if (0xf < auStack160._0_8_) {
      ppppuVar6 = (undefined8 ****)pppuStack184;
    }
    FUN_1400eb512(ppppuVar6);
    FUN_140005858(&pppuStack184);
  }
  else {
    lVar2 = *(longlong *)(lVar1 + 0x250);
    iVar4 = FUN_14008f5cc(appppuStack112,lVar2 + 8,lVar2 + 4,&iStack76,lVar2 + 1);
    lVar2 = *(longlong *)(lVar1 + 0x250);
    *(bool *)lVar2 = iVar4 == 1;
    if (iVar4 == 1) {
      FUN_140005f36(lVar2 + 0x28,appppuStack112);
      FUN_140006ab8(auStack224,appppuStack112);
      auStack128 = (undefined  [16])0x0 << 0x40;
      iStack192 = iStack76;
      pppuStack184 = &PTR_LAB_140563708;
      FUN_14000ffca(auStack176,auStack224);
      auStack128 = CONCAT88(auStack128._8_8_,&pppuStack184);
      FUN_140005858(auStack224);
      FUN_140189b75(&pppuStack184,120000);
      FUN_140009c86(&pppuStack184);
      FUN_14008eebe(appppuStack112);
      FUN_14008ef8d(&pppuStack184);
      ppppuVar6 = appppuStack112;
      if (0xf < uStack88) {
        ppppuVar6 = appppuStack112[0];
      }
      ppppuVar5 = &pppuStack184;
      if (0xf < auStack160._0_8_) {
        ppppuVar5 = (undefined8 ****)pppuStack184;
      }
      cVar3 = FUN_1400eb174(ppppuVar5,ppppuVar6,lStack96,1);
      FUN_140005858(&pppuStack184);
      if (cVar3 == 0) {
        FUN_1400f7e6e(&DAT_140787ba0,0x166dca7e8 - DAT_1407530a0,0);
      }
      hObject = (HANDLE)FUN_1400f5754(&LAB_14008f1df,(longlong)iStack76);
      CloseHandle(hObject);
      if (*(char *)(*(longlong *)(lVar1 + 0x250) + 1) == 0) {
        FUN_1400f7e6e(&DAT_140787ba0,0x166dca8cc - DAT_1407530a0,0);
//"Thanks for purchasing!"
}
      else {
        FUN_1400f7e6e(&DAT_140787ba0,0x166dca892 - DAT_1407530a0,0);
// Hello! Thanks for trying out Sublime Text 3!\n\nSublime Text 3 is a paidupgrade from Sublime Text 2, and your license key is for Sublime Text2.\n\nWould you like to upgrade your license now?
}    }
    else {
      if (iVar4 == 4) {
        FUN_1400f7e6e(&DAT_140787ba0,0x166dca8f6 - DAT_1407530a0,0);
//That license key has been invalidated, due to being shared.\n\nPlease [url=mailto:emailsales@sublimetext.com]emailsales@sublimetext.com[/url] to get your license key reissued.
      }
      else {
        if (iVar4 == 3) {
          FUN_1400f7e6e(&DAT_140787ba0,0x166dca8e8 - DAT_1407530a0,0);
// That license key is no longer valid.
        }
        else {
          if (iVar4 == 2) {
            FUN_1400f7e6e(&DAT_140787ba0,0x166dca8da - DAT_1407530a0,0);
//That license key doesn't appear to be valid. Please check that you have entered all lines from the license key, including the BEGIN LICENSE and END LICENSE lines.
          }
        }
      }
    }
  }
  if (*(longlong *)(lVar1 + 0x2b0) != 0) {
    FUN_140009cda(lVar1 + 0x278);
  }
  (**(code **)(**(longlong **)(lVar1 + 0x28) + 0x18))();
  FUN_140005858(appppuStack112);
  return;
}


6. 通过上面的代码分析,基本上认为 FUN_14008f5cc 是个关键方法,该方法值返回“1”代表注册成功。

[C] 纯文本查看 复制代码

iVar4 = FUN_14008f5cc(appppuStack112,lVar2 + 8,lVar2 + 4,&iStack76,lVar2 + 1);
lVar2 = *(longlong *)(lVar1 + 0x250);
*(bool *)lVar2 = iVar4 == 1;
if (iVar4 == 1) {
。。。


7. 然后点击FUN_14008f5cc转到该方法的代码,看上去是一堆计算,看着头大。

   所以决定直接在函数开始修改为返回eax=1,Ghidra可以直接在代码窗口进行Patch。在需要patch的指令位置,点右键选择Patch Instruction即可。

8. 用Hex工具修改sublime_text.exe,运行,测试注册,输入任意字符,提示成功。



使用感触:因为只是简单使用,最大的感触是Ghidra的分析功能还是挺强大的,XREF比较到位,从定位license串到找到具体的注册信息计算代码就点两下鼠标就到了。   


小白的简单试手,高手轻拍。

[ 由于国内PackageControl.io被墙,所以大家可使用 https://github.com/HBLong/channel_v3_daily 这个镜像下载插件]



免费评分

参与人数 9吾爱币 +7 热心值 +9 收起 理由
多情自古空余恨 + 1 + 1 不错,热心给你了,这个工具确实强大啊,不知有没有后门
chenrunlin1 + 1 + 1 我很赞同!
forever123 + 1 我很赞同!
asongElson + 1 + 1 谢谢@Thanks!
Vegetable_Cat + 1 + 1 谢谢@Thanks!
千百度° + 1 + 1 用心讨论,共获提升!
wxgwxg + 1 + 1 谢谢@Thanks!
sueking + 1 热心回复!
memory947 + 1 + 1 我很赞同!

查看全部评分

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

推荐
 楼主| 发表于 2019-3-15 01:04 |楼主
本帖最后由 javacafe 于 2019-3-15 01:05 编辑

[Asm] 纯文本查看 复制代码
比如原代码为:

       14008f5cc 55              PUSH       RBP
       14008f5cd 41 57           PUSH       R15
       14008f5cf 41 56           PUSH       R14
       14008f5d1 41 55           PUSH       R13
       14008f5d3 41 54           PUSH       R12
       14008f5d5 56              PUSH       RSI
       14008f5d6 57              PUSH       RDI
       14008f5d7 53              PUSH       RBX
       14008f5d8 48 81 ec        SUB        RSP,0x248
                 48 02 00 00

修改为这样的

       14008f5cc b8 01 00        MOV        EAX,0x1
                 00 00
       14008f5d1 48 cb           RET
       14008f5d3 41 54           PUSH       R12
       14008f5d5 56              PUSH       RSI
       14008f5d6 57              PUSH       RDI
       14008f5d7 53              PUSH       RBX
       14008f5d8 48 81 ec        SUB        RSP,0x248
                 48 02 00 00
推荐
 楼主| 发表于 2019-3-14 21:47 |楼主

好吧,度盘自己下吧, 链接: https://pan.baidu.com/s/1jmWjuuDqjDGfB1EXt30q7A 提取码: ryh9 复制这段内容后打开百度网盘手机App,操作更方便哦
沙发
发表于 2019-3-14 21:29
3#
发表于 2019-3-14 21:34
感谢分享。。
5#
发表于 2019-3-14 21:57 来自手机
感谢分享
6#
发表于 2019-3-14 22:12
感谢分享
7#
发表于 2019-3-14 22:42
javacafe 发表于 2019-3-14 21:47
好吧,度盘自己下吧, 链接: https://pan.baidu.com/s/1jmWjuuDqjDGfB1EXt30q7A 提取码: ryh9 复制这段内 ...

注册给*** 要如何修改,给个思路
8#
发表于 2019-3-14 23:07
小小白 看着挺复杂!支持发帖!!
9#
发表于 2019-3-14 23:56
后面几个步骤不够详细= =,模拟了下无从下手,修改数据那步
10#
发表于 2019-3-15 00:10
[C] 纯文本查看 复制代码
       140091282 83 f8 01        CMP        EAX,0x1

修改成这样就行??
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则


免责声明:
吾爱破解所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Service@52PoJie.Cn

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2019-3-20 15:12

Powered by Discuz!

© 2001-2017 Comsenz Inc.

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