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

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5673|回复: 69
收起左侧

[Android 原创] 去除XX学习网络版限制使用,对庖丁3.2另一种字符加密的解密过程记录

  [复制链接]
verber34 发表于 2021-9-9 10:03
本帖最后由 verber34 于 2021-9-9 11:40 编辑

XX学习网络版作者发布过2个版本,第一版本是0823发布的, 使用了庖丁3.2的加密方式,  第二版本是0830发布的, 使用了庖丁3.5的快照加密;这两版都用过,也都去除了使用限制(虽然作者在第二版中明确永久免费,但每次需要输入口令,有些不便,同时,由于每次运行前需要输入口令,那自动运行功能就失效了). 这样的软件有个能用的就OK了,本篇只是记录分享去除限制的方法,今天先说一下第一个版本的破解:
第一个网络版,作者使用的还是庖丁3.2的加密方式,其加密后的形式如下:
------------dex中随机复制的code----------------
new-array v3, v5, [Ljava/lang/Object;
const-string v4, "55473457dbf2f8f7fcd8d54151d3658d"
aput-object v4, v3, v6
const-string v4, "devo"
invoke-static {v3, v4, p1, v0}, Lorg/mozilla/javascript/optimizer/OptRuntime;->callName([Ljava/lang/Object;Ljava/lang/String;Lorg/mozilla/javascript/Context;Lorg/mozilla/javascript/Scriptable;)Ljava/lang/Object;
    move-result-object v3
----------------------------------------------------------
初一看,和之前咱们分析过的那个e函数解密有些像, 其中第一个字符为加密后的密文, 第二个为随机字符,但最后使用这两个字符进行解密,但多看一些代码发现,还是有一些不同的:
1. 所有的密文之后的第二个字符都是 devo,不是随机的
2. 解密调用的函数也不同, 之前那个大家都有印象,就是en.joy 中的 e()函数,而这个不是,是一串串找不到函数的代码.

在解密前,先要了解Lorg/mozilla/javascript/optimizer/OptRuntime;->callName()是个啥? 对于大佬来说,可以分析出这个调用有什么意思,是哪种情况转化来的. 但对于我这样的,没学过程序也不会深入分析的,只能通过对比,猜测这玩意是什么意思?
先在dex中搜索OptRuntime;->callName, 点开几个看看,除了解密的这种,还有一些地方也使用这样的语句,比如:
-------------------dex中随机复制的code---------------]
    const-string v4, "random"
    invoke-static {v3, v4, p1, v0}, Lorg/mozilla/javascript/optimizer/OptRuntime;->callName([Ljava/lang/Object;Ljava/lang/String;Lorg/mozilla/javascript/Context;Lorg/mozilla/javascript/Scriptable;)Ljava/lang/Object;
    move-result-object v3
    aput-object v3, v2, v6
    const-string v3, "delay"
invoke-static {v2, v3, p1, v0}, Lorg/mozilla/javascript/optimizer/OptRuntime;->callName([Ljava/lang/Object;Ljava/lang/String;Lorg/mozilla/javascript/Context;Lorg/mozilla/javascript/Scriptable;)Ljava/lang/Object;
可以看出,delay,random都是autojs中的方法,加密前的写法就类似:random();delay(1000);这样,由此可以看出,callname这个语句,是用来调用函数或方法的,这样看的话,咱们再看那句解密的语句,可以判断出,它也是调用某一个方法或者函数的,第一个是密文的话,那第二个devo,就表示是一个函数了,由此,可以知道,密文是调用devo这个函数解密的.那么这个devo在哪呢??
搜呗。我们知道,function过程编译成smali文件,就是.method这样开头的,搜一下看看devo有木有这样的定义,还真有,随便复制一个看看:
.method private static _c_devo_42(LEn/aealmtn;Lorg/mozilla/javascript/Context;Lorg/mozilla/javascript/Scriptable;Lorg/mozilla/javascript/Scriptable;[Ljava/lang/Object;)Ljava/lang/Object;
并且不止一个类似于这样的定义,那这个是不是解密函数的定义过程呢,不管它,先假设是,如果是,那它的过程肯定是“先把密文传过来,然后解密,最后返回明文”,如何解密咱不管,咱只知道,这个过程中,既有密文又有明文,那这样就好办了,用我们的老方法,打印出密文和明文的对应表啊,
这个过程较长,重点看这两个部分:
aget-object v6, p4, v9
这是开头的一句,经分析,v6中存储的就是传过来的密文,为什么呢?一是因为这个v6,中间的代码中在没有使用过(中间的是加密过程呗),也没有被重新赋值过,只有最后引用了一次,所以,我再下一句中打印出v6(打印前做一个类型转换)
继续看结为,返回的了什么
invoke-static {v0, v1}, Lorg/mozilla/javascript/ScriptRuntime;->add(Ljava/lang/Object;Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
    return-object v0
过程最后返回了v0,是Ljava/lang/CharSequence;类型,百度了一下,这个Ljava/lang/CharSequence;类型,和string类型差不多,我猜测它是解密后的明文了,如何打印出来呢?我们的那个函数只能打印string类型的,所以,打印前需要把Ljava/lang/CharSequence;类型转换成string类型,然后打印,打印后,在转换成原来的类型,确保不出错.根据百度的一些文档,CharSequence;转string需要用tostring()方法,而string转CharSequence;可以强制转换(就咱们用的check-cast),所以,最后这几句可以这样修改:
invoke-static {v0, v1}, Lorg/mozilla/javascript/ScriptRuntime;->add(Ljava/lang/Object;Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
    move-result-object v0
#把v0 转成string类型
    invoke-interface {v0}, Ljava/lang/CharSequence;->toString()Ljava/lang/String;
#转换后的类型存储到v0中
    move-result-object v0
#自行加一句以前用过的put_log函数
………………
#再把v0的类型改回来
    check-cast v0, Ljava/lang/CharSequence;
    return-object v0

至此,我们的打印密文对应表已修改好,将所有文件中的定义中都这样修改,运行吧……密文对应表就形成了。之后的过程就是搜索该跳转了.

最后看一哈这个devo函数:
这个解密函数,每个文件中都有一个定义,那庖丁的作者为什么不定义一次就行,就像e函数那样,这是因为,每一个文件中的解密时,都需要当前文件的类名,这个文件名和类名是相同的,大家看解密函数中的部分,都有aealmtn123456789这样的字符,那数字前面的就是类名(大家理解成文件名也可以),所以,不同的类名,其解密过程需要不同的字符.
所以,
有些人可能这样去想,我用软件中的提示,自己去写一句autojs代码,然后用相同的加密方法,再打开dex中得到密文,这样是不是可以得出明文对应之后的密文呢?比如:
比如原APK中出来一个提示 " 你的激活码错误",那我自己写一个js文档,最简单的那种 toast("你的激活码错误"), 然后用庖丁的这种加密方法生成一个dex文件,这个dex文件中的密文是不是和作者程序中的密文相同呢?
答案是 :不相同
因为,作者和你虽然使用的相同的加密方法,但这个加密过程中生成的类名不相同啊(也就是文件名),这样,加密后的密文也是不同的.

--至此,第一个网络版分析完成,有人会说,你这没有说怎么破解啊, 其实,你把字符解密了,通过提示搜索定位到关键位置,改跳转就可以. 这个过程是简单的.autojs加密成dex中,改的就是if跳转
修改前,大家可以先搜索MD5, 这是文件验证, 把MD5的地方的跳转改了, 就不会再出现 run fail的错误.然后,运行打印密文表, 只需要找到 点击一键运行时的错误提示(状态ID啥的)就改那一个,就完成去除限制.


----抽空写下一篇内容, 第二个网络版去除验证的方法(即快照加密)


















免费评分

参与人数 8吾爱币 +6 热心值 +7 收起 理由
香芋 + 1 + 1 用心讨论,共获提升!
dm530 + 1 我很赞同!
yzxinxi + 1 谢谢@Thanks!
溯雪 + 1 + 1 用心讨论,共获提升!
caileimeng + 1 + 1 用心讨论,共获提升!
dgy + 1 用心讨论,共获提升!
12580 + 1 + 1 谢谢@Thanks!
caleb110 + 1 + 1 谢谢@Thanks!

查看全部评分

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

 楼主| verber34 发表于 2021-9-9 14:57
开着跑车泡MM 发表于 2021-9-9 14:47
楼主人家都免费放出来了,那样做也是避免被封号啊,之前有其他软件有封号的情况啊

这是52破解论坛啊,交流方法
qq91308 发表于 2021-9-10 18:04
verber34 发表于 2021-9-10 11:41
没怎么用过. 现在tiku.db维护已经很好了.本地题库足以.
现在网络中只有0830版的,不清楚网络题库可不可用 ...

一直在用XX 但是每日答题经常错一个就红色报错,很麻烦
 楼主| verber34 发表于 2021-9-9 10:03
superboy1984 发表于 2021-9-9 10:13
厉害了,come on
Prozacs 发表于 2021-9-9 11:01
学习一下
QingYi. 发表于 2021-9-9 11:09
这个文字排版谁看得下  不得不说评论里面划水的"用户"真的多
闪闪闪 发表于 2021-9-9 11:10
学习一下
 楼主| verber34 发表于 2021-9-9 11:14
QingYi. 发表于 2021-9-9 11:09
这个文字排版谁看得下  不得不说评论里面划水的"用户"真的多

手机写的,凑活看把,
lanxiqingmo 发表于 2021-9-9 11:30
厉害感谢大佬学习到了
MZA1220 发表于 2021-9-9 11:34
厉害感谢大佬学习到了
lies2014 发表于 2021-9-9 11:38
能不能给个练手文件
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

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

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

GMT+8, 2024-4-26 10:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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