吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 39801|回复: 112
收起左侧

[Android 原创] 听鬼哥说关于个别软件的保护绕过分析

  [复制链接]
听鬼哥说故事 发表于 2014-8-18 12:59
本帖最后由 听鬼哥说故事 于 2014-8-28 18:01 编辑

软件介绍:跟电脑上面的按键精灵类似
目的:免费使用
软件地址:自己搜索即可,去官网下

第一步:分析软件的相关功能

图片1.jpg


通过简单使用软件,可以得到以下几点:
1.软件未注册版本只能使用30分钟;
2.可以通过注册码,注册文件两种方式注册;
3.原包正常可用,除使用时间限制外其他功能正常

第二步:猜测可用突破点
1.根据提示可使用30分钟进行突破
res/values.xml中发现相关内容”toast_tryTime”,表示我们可以这样做.
2.分析注册码相关使用算法,写出相关注册机代码
lib/libjni.so中发现相关注册算法,这样方式可用.
其实到这里先简单说一下,如果上面两种方式可用,那么就很简单,此文也就不必写出的,所以有耐心的同学继续往下看,这里写我的分析过程,方便同学们以后遇到软件的思路拓展。

第三步:开始尝试
我们先进行简单的,去根据限制时间的提示寻找上下文内容。

图片2.png


通过相关搜索,可以看到只有一个gt.smali文件。
下面已经对这个字符串使用的上下文写了注释,直接参考一下即可。


图片3.png


注释已经很详细了,最简单的,我们直接修改那个判断if-nez改为if-eqz即可。或者可以根据这个判断的含义,在if-nez上面写上一句
const/4 v0, 0x1 ,不等于0则跳,我们写做1,肯定直接跳到下面的执行流程上,而不执行提示使用限制时间。

好了,我们重新打包,运行测试。。。。


图片4.png


然后运行我们刚才录制的一段脚本,然后提示如上图所示。
前面两步测试已经说过,软件所有功能都正常使用,所以这里有错误提示,那么我们就继续跟进错误查看。
Unicode编码一下,继续搜索:有两个文件都存在,这里只列举一个


图片5.png


相关代码已经注释清楚,这里我们还按照简单的思路走,修改if的判断,(搜索出来的文件,都修改下)然后重新打包,继续运行。。。

又提示其他错误了。。。

图片6.png


然后又是一段漫长的过程,追踪代码,然后到最终无果。。。

到了这里,我们就应该思考,软件是不是有其他验证,否则的话,我们上面的修改就已经起作用了。

第四步:再次思考
通过上面的尝试,我们猜测到软件有防护,所以我们从注册方面入手,查看smali中注册的相关内容,第三步中,已经发现那个a()方法是注册成功与否的标志,那么我们跟进。


图片7.png


看到上图的注释,我们可以了解,这里是通过检测本地的一个文件,取出三个数值,来调用valid方法判断软件是否注册,这三个字符串具体的含义,我们稍后分析。

从这里,我们则继续看valid方法,那个是主要判断注册成功与否的方法。


图片8.png


看到这里,我们就有眉目了,是调用的so里面的算法了,那么我们就挂起IDA来继续分析,同时,如果核心代码在so里面,那么我们只修改so而可以不用对dex进行任何操作,所以这里我们可以先观察看看,排除此软件的验证是对dex的。


图片9.png


说起来修改so,有难的,有简单的,这里我们是通过java代码跟进,所以知道这里这个方法的返回值是布尔类型的,所以,最简单的方法,不外于直接返回数值true

查看一下上下文,发现有这个,名称简单猜测,是打开调试Log的信息,这里,我们需要的是他的代码,即


图片11.png


Movs                 r0,#0
BX                 LR
了解ARM汇编的,很容易看出这个代码意思,将0赋值给R0,然后执行返回方法。
所以这里我们需要修改的是将true,也就是1赋值给R0,然后返回。

点击Hex-View查看一下:
Mov  R0,  #0   对应的16进制为 00 20
BX   LR       对应的16进制为 70 47

我们简单修改一下,将这四个字节改为 01 20 70 47,然后点击Apply Changes ,(快捷键F2,查看IDA-View 窗口,发现一切正常,那我么就直接操作valid方法去:


图片11.png


如上图所示,我们就修改完了,一切正常,那么我们就记录下内存,movs  R0 ,#1的地址,然后用010Editor之类工具跳转到对应地址,修改为上面所述4个字节,好了,这样起码我们没有对dex进行任何操作,那么如果此软件是对dex进行验证的话,那么我们就可以直接绕过了。

注明:不熟悉ARM语法的直接找找资料看即可,网上很多,上面的修改是为了方便叙述介绍其他地方引用相关指令来直接修改,熟练掌握arm汇编,自己计算即可。所以这里不必问如果此so没有类似指令,是不是就不能破解了这类问题了。

我们使用zip打开apk包,替换掉lib/libjni.so , 然后签名重新运行。

再次运行后,我们发现软件已经注册成功:

图片12.png


但是在播放脚本的时候,还是出错,错误又回到了我们最初修改dex时候的。


图片13.png


好吧,到这里再做一步,对软件原包进行重新签名,安装运行。。。

一样的错误,所以,现在我们应该确定是签名或者md5类的验证了。

大致浏览了下smaliso,都没发现验证,功力太低,没办法。。

那么我们就继续想其他方法吧

第五步:打坐思考
经过了上面一系列的操作和尝试,我们现在应该静下心来思考一下了。。。

目前我们还可使用的方法如下:
1.分析注册算法
2.不操作原包的情况下修改,即hook方面的

跟进valid方法,就可以追寻到注册算法相关内容了,我动态调试了下:


图片14.jpg



相关参数之类的,看着不是太难,不过本身我C++方面能力比较差,从恢复重写算法来说难度还是比较大,所以也先放弃了这个方法。

然后我们就想hook方面的东西吧,反正注册成功与否的判断方法我们有了,那么接下来操作就应该比较简单了。。。

话说,手里的hook代码还有很多bug,时灵时不灵的,于是向朋友求助索取了一份hook代码,目前还没看完,所以这里先不用hook的方法,等我分析完毕之后,重新补充下。。。

此软件的使用,必须是root情况下的,所以手机肯定必须得root,那么,我们有root,又是本地使用的,何必再多费心思呢。

于是shell下进入data/data/net.aisence.Touchelper/lib下面

QQ图片20140818121534.jpg

权限之类的记得修改

现在大家就知道要做什么操作了,我们直接rm libjni.so文件,然后将上述第四步修改完毕的so直接替换一下不就行了。

然后重新打包,运行,播放一个脚本,没限制时间提示,打开注册状态页面,显示已经注册。。。

通过上述操作,我们已经可以正常使用此软件了,那么,软件是不是每一次都会重新还原覆盖lib这个文件夹呢?


其实,测试不测试,都没啥太大效果了,因为我们必须有root权限的,如果会还原那么现在我们还没使用hook方式的时候,我们直接重新写个apk来操作lib文件夹下libjni.so的替换不就是了,权限够大,没啥事的,就是每次使用麻烦一点而已。

或者,可以直接写个apk来启动触摸精灵,然后启动软件几秒钟后,替换那个文件。。

第六步:更好方式的破解
看到这里,相信大家对上述的操作都有了了解,上文都是采用比较简单的方式来破解的,但是还有更好的方法破解,因为时间和技术问题,上文没有对那些方法进行继续分析使用,例如直接hook掉这个函数,再或者写个注册机,有兴趣的朋友,欢迎继续分析下去,发出来文章分享~

开发做软件不容易,软件原包以及其他东西不再发出,有兴趣的自行研究即可.


听鬼哥说关于个别软件的保护绕过分析.doc (501.5 KB, 下载次数: 163)

如果感觉上述不完善,那么就开始注册方面修改。

动态分析的相关资料也放上,未完成,希望有兴趣的朋友,继续分析下去、


CM动态调试.rar (162.57 KB, 下载次数: 100)




~听鬼哥说故事



免费评分

参与人数 21热心值 +21 收起 理由
wnagzihxain + 1 有意思
myqqq + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
xiaobaiyey + 1 热心回复!
biokevy + 1 有一个想法,既然有签名验证,那么就可以使.
yAYa + 1 大牛笑纳~ 十分详细!
夜狼丶 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩.
小小解密 + 1 已答复!
cr7890 + 1 谢谢@Thanks!
秋海明月 + 1 谢谢@Thanks!
昕悦阁丶风雪 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
february + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩.
跳跃的灵魂 + 1 只能说 叼的飞起..基本上文章都是精品..
codelive + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩.
米聊45673767 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩.
findkill + 1 谢谢@Thanks!思路不同凡响!学习了。。。
龙吟之耀 + 1 已答复!
924410377 + 1 谢谢鬼哥的无私分享
1013356744 + 1 我很赞同!
AI-Compare + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩.
奈落堇梦 + 1 已答复!
羅少 + 1 感谢鬼哥

查看全部评分

本帖被以下淘专辑推荐:

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

淡然出尘 发表于 2014-8-18 13:02
前来支持鬼哥 跟随鬼哥脚步学习哈
taintitly 发表于 2014-9-4 18:58
听鬼哥说故事 发表于 2014-8-18 19:37
嗯,是的,注册算法那里,使用了几个参数,你看IDA我那个动态调试也可以简单看出。
有输入的注册码,密 ...

signed int __fastcall License::valid(int a1, const char *a2, int a3, int a4, int a5)
{
  const char *v5; // r6@1
  int v6; // r8@1
  int v7; // r1@1
  int v8; // r4@1
  int v9; // r5@1
  int v10; // r7@1
  int v11; // r3@2
  signed int result; // r0@7
  int v13; // r0@9
  time_t v14; // r0@12
  int v15; // r1@12

  v5 = a2;
  v6 = a4;
  v7 = *(_DWORD *)(a1 + 4);
  v8 = *(_DWORD *)a1;
  v9 = a1;
  v10 = a3;
  if ( v7 == *(_DWORD *)a1 )
    return 0;
  while ( 1 )
  {
    v11 = (*(_BYTE *)(v8 + 25) << 8) | *(_BYTE *)(v8 + 24) | (*(_BYTE *)(v8 + 26) << 16) | (*(_BYTE *)(v8 + 27) << 24);
    if ( v11 == 2 )
      break;
    if ( v11 == 3 )
    {
      v13 = License::checkWMAC(v9, v8 + 33, v6);
      goto LABEL_10;
    }
    if ( v11 == 1 )
    {
      LOBYTE(v13) = License::checkIMEI(v9, (const char *)(v8 + 33), v5);
      goto LABEL_10;
    }
    v8 += 100;
LABEL_6:
    if ( v7 == v8 )
      return 0;
  }
  v13 = License::checkIMSI(v9, v8 + 33, v10);
LABEL_10:
  if ( !v13
    || (v14 = time(0),
        v15 = (*(_BYTE *)(v8 + 10) << 8) | *(_BYTE *)(v8 + 9) | (*(_BYTE *)(v8 + 11) << 16) | (*(_BYTE *)(v8 + 12) << 24),
        !((*(_BYTE *)(v8 + 14) << 8) | *(_BYTE *)(v8 + 13) | (*(_BYTE *)(v8 + 15) << 16) | (*(_BYTE *)(v8 + 16) << 24)))
    && v15 <= v14 )
  {
    v7 = *(_DWORD *)(v9 + 4);
    v8 += 100;
    goto LABEL_6;
  }
  result = 1;
  if ( a5 )
    *(_DWORD *)a5 = v15;
  return result;
}
羅少 发表于 2014-8-18 13:01
我是用户 发表于 2014-8-18 13:23
现在android端不用so库,基本上没什么加密可言了。
Tong 发表于 2014-8-18 13:28
好流弊的帖子
索马里的海贼 发表于 2014-8-18 13:32
精华一篇 不错不错,.
1013356744 发表于 2014-8-18 14:52
学习一下
pwelyn 发表于 2014-8-18 15:56
感谢分享,比较详细
小试锋芒 发表于 2014-8-18 16:10
期待鬼神的补充分析,精华奉上!
924410377 发表于 2014-8-18 16:19
谢谢分享,鬼哥v5
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-16 05:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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