开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 12968|回复: 3
收起左侧

[Android逆向] 某**数软件接口分析

[复制链接]
结帖率:0% (0/1)
发表于 2020-3-24 05:48:22 | 显示全部楼层 |阅读模式   广东省汕头市
[size=15.399999618530273px]首先和大家道歉先,由于Mac不会装jadx-gui,分析的时候显示效果有点差,请大家见谅一下。
[size=15.399999618530273px]小白第一次发帖,大佬请勿喷!
[size=15.399999618530273px]无聊的时候看到一款**数的软件,可以**XzfbQQ 步数。[size=15.399999618530273px]挺强哈,那我就抓包看看。发现抓包失败了。
[size=15.399999618530273px]
[size=15.399999618530273px]那么软件肯定 禁止抓包了,所以我们另谋出路吧。
[size=15.399999618530273px]先看看软件。发现软件被加固了,需要脱壳下,这里就不演示脱壳过程了。
[size=15.399999618530273px](论坛上有大佬分享的脱壳机,大家可以去尝试下 如fdex2 反射大师)

[size=15.399999618530273px]脱壳完,通过分析com包下的e4aruntime 发现这是一款E4A编写的安卓软件。
[size=15.399999618530273px]


[size=15.399999618530273px]通过代码分析,我们可以很清晰的知道,确实调用了方法,禁止了抓包。
而且还有sign值,且通过Apputils下的encode方法进行加密sign值后提交到服务器。

而sign值 是通过 apputils类下的decode方法加密的 传入的值 为 jin.encode() + 账号 + 密码 + 步数 +  jin.encode()
加密的代码在so层。我也不会看so层呀  (继续看后面的操作)
因为java层 有传输 encode() 我们可以知道这个值。
而请求地址也是加密的。而且调用了其他类进行解密。我们单单分析源代码页可以解密出来。

但是,今天我讲一个另类的解密
我们可以这样。因为E4A是一个封装化的软件。所有代码都是封装在e4aruntime中。
所以我们只需要通过Xposed Hook 神器 对这些命令进行hook,就可以知道参数和返回值啦。
但是还有一个点,软件加固了,是TX的加固。我们需要hook到这个类加载器才可以hook这些方法成功。
这里告诉大家一个技巧 如何快速找类加载器的方法,通常类加载器的方法下有system.loadlibrary命令,因为加固后都是调用so文件的。
现在最新的 TX加固类加载器在  com.stub.StubApp下的attachBaseContext方法
我们通过上图,可以得知这些命令分别是 开始取网页源码,开始发送网络xx4  Authcode加密 我们找下方法。



[size=15.399999618530273px]

[size=15.399999618530273px]那么我们只需要hook这个 com.e4a.runtime.加密操作  和 apputils 的加解密方法
代码给大家贴一下
  
//hook e4a 发送网络xx4
XposedBridge.hookAllMethods (XposedHelpers.findClass ("com.e4a.runtime.网络操作", classLoader),
"发送网络xx4",
new XC_MethodHook () {

protected void beforeHookedMethod (XC_MethodHook.MethodHookParam param) throws Throwable {


String  data = (String) param.args[0];
String  key = (String) param.args[1];

Log.d ("pianpu",  "=========================发送网络请求参数========================" );
Log.d ("pianpu", "data:" +data);
Log.d ("pianpu", "key:" +key);
String path = "/sdcard/PP_Hook/"+  packagename + "/Decrypt.txt";
String data2 = "url:" +data + "\n" + "data:" +key;
tools.writefilebefore (path,data2,"发送网络xx4");

}
protected void afterHookedMethod (XC_MethodHook.MethodHookParam param) throws Throwable {
String result = ""+ (String) param.getResult ();
Log.d ("pianpu", "result:" +result);
String path = "/sdcard/PP_Hook/"+  packagename + "/Decrypt.txt";
String data2 = "result:" +result ;
tools.writefileafter (path,data2,"发送网络xx4");
}
});
//hook e4a 取网页源码
XposedBridge.hookAllMethods (XposedHelpers.findClass ("com.e4a.runtime.网络操作", classLoader),
"取网页源码",
new XC_MethodHook () {

protected void beforeHookedMethod (XC_MethodHook.MethodHookParam param) throws Throwable {


String  data = (String) param.args[0];
String  key = (String) param.args[1];

Log.d ("pianpu",  "=========================取网页源码========================" );
Log.d ("pianpu", "data:" +data);
Log.d ("pianpu", "key:" +key);
String path = "/sdcard/PP_Hook/"+  packagename + "/Decrypt.txt";
String data2 = "url:" +data + "\n" + "data:" +key;
tools.writefilebefore (path,data2,"取网页源码");

}
protected void afterHookedMethod (XC_MethodHook.MethodHookParam param) throws Throwable {
String result = ""+ (String) param.getResult ();
Log.d ("pianpu", "result:" +result);
String path = "/sdcard/PP_Hook/"+  packagename + "/Decrypt.txt";
String data2 = "result:" +result ;
tools.writefileafter (path,data2,"取网页源码");
}
});
[size=15.399999618530273px]


  
//e4a Authcode 加密获得的xx
XposedBridge.hookAllMethods (XposedHelpers.findClass ("com.e4a.runtime.加密操作", classLoader),
"Authcode加密",
new XC_MethodHook () {

protected void beforeHookedMethod (XC_MethodHook.MethodHookParam param) throws Throwable {
String  data = (String) param.args[0];
String  key = (String) param.args[1];
Log.d ("pianpu",  "|=========================Authcode加密========================|" );
Log.d ("pianpu", "data:" +data);
Log.d ("pianpu", "key:" +key);
String path = "/sdcard/PP_Hook/"+  packagename + "/Decrypt.txt";
String data2 = "data:" +data + "\n" + "key:" +key;
tools.writefilebefore (path,data2,"Authcode加密");
}
protected void afterHookedMethod (XC_MethodHook.MethodHookParam param) throws Throwable {
String result = ""+ (String) param.getResult ();
Log.d ("pianpu", "result:" +result);

String path = "/sdcard/PP_Hook/"+  packagename + "/Decrypt.txt";
String data2 = "result:" +result ;
tools.writefileafter (path,data2,"Authcode加密");
}
});

//e4a Authcode 解密获得的xx
XposedBridge.hookAllMethods (XposedHelpers.findClass ("com.e4a.runtime.加密操作", classLoader),
"Authcode解密",
new XC_MethodHook () {

protected void beforeHookedMethod (XC_MethodHook.MethodHookParam param) throws Throwable {
String  data = (String) param.args[0];
String  key = (String) param.args[1];
Log.d ("pianpu",  "|=========================Authcode解密========================|" );
Log.d ("pianpu", "data:" +data);
Log.d ("pianpu", "key:" +key);
String path = "/sdcard/PP_Hook/"+  packagename + "/Decrypt.txt";
String data2 = "data:" +data + "\n" + "key:" +key;
tools.writefilebefore (path,data2,"Authcode解密");
}
protected void afterHookedMethod (XC_MethodHook.MethodHookParam param) throws Throwable {
String result = ""+ (String) param.getResult ();
Log.d ("pianpu", "result:" +result);

String path = "/sdcard/PP_Hook/"+  packagename + "/Decrypt.txt";
String data2 = "result:" +result ;
tools.writefileafter (path,data2,"Authcode解密");
}
});


[size=15.399999618530273px]我们只需要hook这4个就行。其中无论他咋加密,我们都不需要去管他。只需要看过程 和 加密类型 方法即可。
[size=15.399999618530273px]运行后,我们可以看到已经把核心代码hook下来且输出到本地文件了。

[size=15.399999618530273px]
[size=15.399999618530273px]因为我不会so层分析,所以暂时对这个sign值没方法获取加密方法。(最近正在学习frida hook so层的)
[size=15.399999618530273px]据此,sign值,我确实不知道咋加密的,但是看上去像是md5加密。刚好测试了一下,这个md5没有另外的加盐处理。嘻嘻
[size=15.399999618530273px]明文的sign =Jni.encode()  + 账号 + 密码 + 步数 +   Jni.encode()  例子就是  jshare6661234561234568888jshare666
[size=15.399999618530273px]其中jshare666 是在java层传输,我们可以知道。其中的是账号 密码 步数。所以我们md5加密一下看看,与这个sign值一样不。
[size=15.399999618530273px]

[size=15.399999618530273px]因为我们是乱写的参数,所以自然登陆失败。
[size=15.399999618530273px]

[size=15.399999618530273px]

[size=15.399999618530273px]可以看到,进行一些列网页请求后返回提示给app。
[size=15.399999618530273px]据此,我们拿到我们想要的协yi,而且不用去抓包,直接hook这些请求类即可。且sign我们一起分析了出来。
[size=15.399999618530273px]所以,e4a的安卓编程软件,把代码存储在一个集中的类中让去调用,是非常容易去hook到的。
[size=15.399999618530273px]

[size=15.399999618530273px]




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
结帖率:100% (33/33)
发表于 2020-3-24 12:34:17 | 显示全部楼层   浙江省宁波市
pianpu 发表于 2020-3-24 12:29
我倒想用Windows,可惜没有。还差一个逆向手机

mac装个双系统。手机买个pixel或者nexus5差不多
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
 楼主| 发表于 2020-3-24 12:29:16 | 显示全部楼层   广东省汕头市
asphalt9 发表于 2020-3-24 11:05
用 Mac 的都是老板

我倒想用Windows,可惜没有。还差一个逆向手机
回复 支持 反对

使用道具 举报

结帖率:100% (33/33)
发表于 2020-3-24 11:05:51 | 显示全部楼层   浙江省宁波市
用 Mac 的都是老板
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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