低调(d-iao) 发表于 2021-6-25 19:27

(0626补充) 一封来自私信里的sos信号

本帖最后由 低调(d-iao) 于 2021-6-26 15:09 编辑

准备工具:
1.反编译工具
2.抓包工具
3.IDA
4.vmos

演示软体:
轻启动 v2.18.3

软件保护
1.加固保护
2.软件保护
3.umeng保护
4.功能限制
5.时间暗桩
6.so保护

成品图:


教程分为2种方式破解:
1.工具党模式
2.手动党模式

工具模式:
首先 先来说说工具模式,如果你只为了破解而破解,并且只想快速处理,请选择工具模式,无需回复 即可观赏。

1.找个sandhook类的过签名工具 不必脱壳,然后选择完整包模式处理,即可过掉所有校验保护。

2.找个脱壳机对原版进行脱壳。

3.使用反编译工具进行反编译,搜索trial_millis 定位到关键类处,代码里有个boolean的方法名 赋值true即可完成破解。
(ps: 我只试了sandhook没问题,其余工具自行测试)

================================

好了 工具模式讲解完毕
现在来手动模式


手动模式:

依旧老规矩 看看软件的付费机制
图中可以看到部分功能有限制


随便找个功能点击 软件会进行联网验证
-网络验证第一想法就是进行抓包
那说明破解方面有思路了


那先来抓一下看看
关键url:
https://wpengapp.com/api/appuser                                       
                     
请求包部分内容(后面要用到)


返回包 (rsa加密)


so let do it...

1.加固保护
-软件使用腾讯御加固保护
-无论脱壳工具或ida dump 网上都有不少大神的教学 这里请自行处理。


2.软件保护
脱完壳修复好dex格式与入口,惯例的使用mt去除签名,运行后发现软件启动到splash后闪退 通知栏提示此版本不可用
很明显软件有防破保护

现在的app保护很少会放在dex里 所以先看看lib文件里有哪些so
可以发现只有一个 libreqen.so


这里直接用mt的hex模式查看吧
然后搜索签名看看 signature
可以看到有一个结果


在so里就得用ida了
载入后从函数名可以看出有 md5 有sign 之类的名称 很明显有保护
并且可以看到有3跳函数从java层调用      注: 以java_开头的
所以主要跟踪这3条函数走


第一条函数 getAppSign
图为流程图的分支线


图里的第一幅图 可以看到调用了apk_sign_md5

跟随进去后会来到第二幅图的地方
这里可以看到调用了2个重要函数
分别是load_apk_sign &sign_md5

先跟随load_apk_sign函数会来到左下角的地方 主要代码太长 这里f5转了一下方便阅读
从代码里可以看出 以char方式获取apk签名信息
所以这里主要只是获取签名值

获取完成后 程序会回到第二幅图继续往下执行 最后后来到sign_md5 也就是右下角的图里

这里主要就是把CharString的签名值转成md5值 到此getAppSign 分析完毕

结论: 这条函数主要就是获取apk签名的md5值


接下来要知道获取完使用在哪里呢?
那就需要回到java层
反编译dex搜索 getAppSign 定位到下图
觉得不好分析可以使用mt的混淆对抗


从代码里可以看出 程序先同样的方式从java层获取签名的md5
接着再从so里获取md5

然后 会对这2个结果进行比较 一样则继续 不一样则继续第二种比较
第二种则是比较 如果签名值 不等于         
9371b39892df3b212e15cffc564cc4f2 且不等于
5d975cd6e7dd2e5db97eb3ccd9d74d61                                 
就会闪退

结论: 签名要么一样 要么就和这2个值随意一组相同 就不会闪退
第一个校验保护 分析完毕


接下来第二条函数 getPubKey
图中可以看到会调用check_apk_sign进行验证
验证正确就会给出rsa key


从图里可以看到 套路基本一样
获取签名md5值 > 比较是否和原版的md5相同 > 相同则给出rsa key


结论: 第二个函数主要获取rsa key
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCJGk132gxzKMEvt5dI+fI7P9LcJCx+ZTaaLTwyihXQCytPOMqTN6i+FPCBD7wwBhPgqopUcTQVdrRgRJgtxMJh

这个暂时不重要 dex那边就先不跟进 这里验证主要在so 如果apk的签名不等于so里的值就会闪退 且通知栏提示版本不可用


接下来到第三个函数 getSignature
图里的套路基本一样 这里直接说明这条函数的作用


这条函数主要就是md5(数据 + @$^$%^fasd&%df&f||://)

结论: 从分析可以得出
第一条函数获取 sign md5
第二条函数获取 rsa public key
第三条函数则是 将数据 + @$^$%^fasd&%df&f||:// 再转成md5

意思是不是说明 这个so基本就没有其他作用了? 而且还带校验保护
那这里就直接抛弃它吧 把这些需要的数据直接java层处理吧 这样就也无需理会native层的保护了

首先把lib里的libreqen.so文件删除掉
然后把dex里的这句代码也删除掉

    const-string v0, "reqen"
   
    invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V
再把 getAppSign 与 getPubKey 给出固定值 并把getSignature整个方法删除掉
下图为修改前后

修改前:


修改后:


最后getSignature要怎么用写呢?
还记得java层获取签名md5的地方吗?
说明那边有句md5转换的代码所以可以直接拿来用
具体看修改前后吧
getSignature结果会有2条 2条都改吧

修改前:


修改后:


至此软件保护处理完毕


3.Umeng保护
修改好后运行发现 软件提示破解版


还记得上面的抓包图吗?
可以看到 channel=coolapk 渠道号
看过我之前的文章都知道这是umeng的伎俩
(那文章因版权问题,现在看不了)

所以我直接就锁定是umeng搞鬼
直接搜索 "channel" 会有几个结果 懒得一个一个分析 我直接全赋值coolapk


到此软件已可以正常运行了。


4.功能限制
现在可以开始破解了,从首次启动测试,已知软件是通过网络验证,并且从抓包中可以得知,返回数据是经过加密的,从pubkey得知,软件有使用rsa算法,
所以这里先从rsa入手

图中可以看到 橘色线调用了rsa算法 然后输出字符串
这里偷懒 直接在结果插了一句log 看看明文是什么内容


dex搜索trial_millis 定位到代码处

                                                                           
经过分析 只要status为1就是已注册 所以这里直接如图给status赋值1即可完成破解



至此破解完成,破解从来都不难,难的是围绕破解的保护。


5.时间暗桩
软件随机使用一段时间后会验证破解版,如果没通过,就会跳到和umeng一样的界面,禁止继续使用,从上篇文章中得知umeng会把验证结果写到当前软件data目录里,所以这里直接进data看看有没有什么问题
data需要root才能进入,这里借助vmos进行分析
来到data目录 经过分析发现 其中有一个参数的时间与提示盗版时间吻合
将其试试删除保存重运行软件后发现可以正常使用了
说明是这条参数禁止破解版使用。


resources.arsc找参数名 可以看到名称被混淆了


dex搜索id 得到名称为pw_gohom


图中可以看到 如果pw_gohom的值大于0就提示破解版
所以这里的跳转不可以实现 删除
(这里主要是禁止破解版使用功能)



经过分析 还有一处需要修改
作者狡猾 另一处使用了pw_gohom做定位
(这里就是跳网页提示破解版,和umeng那个图一样)

这里则判断大于0就打开网页提示破解版
所以这里的跳转必须实现 修改为goto即可



6.so验证
后来发现 导致第5错误的原因是so保护
从分析pw_gohom过程得知 软件提示破解版的时候会访问官方链接
http://wpengapp.com/lightstart/safetyreminder

所以可以从错误信息得方向入手 图中红线位置


跟随图中红线的代码来到了 另一个界面
这里画线处是获取 url链接的地方 继续跟进去


这里可以发现有个字符串被加密了 其实是des加密
红线位置就是进行解密 解密后得出 safetyreminder


我这里也偷懒直接log出来吧 如图 插一句log 输出p1内容


现在全局搜索 看看有多少个地方调用了加密的safetyreminder
一共有5条 其中导致错误的经过分析来自红圈那条


进去后可以发现 原来会验证so目录里的文件是否被修改
回想官方的so我已经删除了 如果so目录为空它就不会进行验证
接着又回想 我惯例的打了mt去签 所以so里又有别的文件了
哎呀 看来惯例有时候也不一定是好事。就因为加了mthook,所以就导致这验证触发


好了 居然知道了这问题 直接把着跳转删除即可。


到此 总算完成解锁了 现在可以正常使用了

最后 如果使用过程还有问题
就把第6里得到的5个结果也处理一遍吧


后记: 这软件这里不算完全分析 软件本身对我没有太大用处就不再深究,主要只是私信里有小伙伴让帮忙看看,至于有兴趣的可以更深入分析


0626补充:
后来发现有2个地方调用nativelibrarydir
都需要处理

低调(d-iao) 发表于 2021-6-29 18:27

青铜王老五 发表于 2021-6-29 11:13
大神,我的帖子有一个求助,不知道能不能在空闲时候帮我一下,感激不尽。这个帖子是关于破解内购的,我是个 ...

游戏我不要 尤其国内游戏 各种手机号注册 各种实名玩意,对我来说玩中国游戏太麻烦了。。


我给你2个思路

不是所有东西都能破解内购一般游戏都会有2道门 内购一道 自身一道 内购完成提交订单 自身验证 通过才会++

不是所有游戏都能破解本地改数据是最直接的方式 可改表示数据在本地运算 如果服务器运算 改本地也没用

daxia2002 发表于 2021-6-25 19:48

52这边支持大佬,还是这边图片清楚

sympohh 发表于 2021-6-25 19:37

大佬厉害,学习了,破解的各种保护找起来太累了

Gijia 发表于 2021-6-25 19:37

详细的分析过程,拜读中,支持原创的辛勤付出。

正己 发表于 2021-6-25 19:41

大佬终于来这边更新了{:17_1068:},隔壁小学生太多了,希望大佬不要生气

低调(d-iao) 发表于 2021-6-25 19:48

正己 发表于 2021-6-25 19:41
大佬终于来这边更新了,隔壁小学生太多了,希望大佬不要生气

因为昨晚先在那边发。。然后发现后面还有校验 所以这里就先不发布

加奈绘 发表于 2021-6-25 19:52

大佬,学到了{:1_921:}

正己 发表于 2021-6-25 19:54

低调(d-iao) 发表于 2021-6-25 19:48
因为昨晚先在那边发。。然后发现后面还有校验 所以这里就先不发布

我去年就让芽衣大佬帮我分析过这款软件,那个时候还没有这么多校验,大佬这教程很详细,让我等小白受益良多{:17_1068:}

低调(d-iao) 发表于 2021-6-25 20:01

正己 发表于 2021-6-25 19:54
我去年就让芽衣大佬帮我分析过这款软件,那个时候还没有这么多校验,大佬这教程很详细,让我等小白受益良 ...

昨晚刚好私信有人问

低调(d-iao) 发表于 2021-6-25 20:10

daxia2002 发表于 2021-6-25 19:48
52这边支持大佬,还是这边图片清楚

其实那边图片不好排版 太小了
每次我都会上传很多图片 而且又要顾虑模糊问题
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: (0626补充) 一封来自私信里的sos信号