某APP加密解密

admin 2025年3月14日09:57:15某APP加密解密已关闭评论11 views字数 2687阅读8分57秒阅读模式

公众号现在只对常读和星标的公众号才展示大图推送,

建议大家把BHSec设为星标,否则可能就看不到啦!

-------------------------------------------------------

1.安装APP
判断APP是否是加壳的,使用查壳工具发现是使用了邦邦企业壳
某APP加密解密如果壳程序没有frida检测的话,其实对我们逆向HOOK的影响不算是特别的大。这里随便输入一个Hello frida脚本,判断存在frida检测,还得过一下frida的反调试….
某APP加密解密
2.Frida反调试
常见的frida检测方式就是查看当前进程的maps文件,以及status文件,一般会使用libc.so中的open函数去打开文件,这里可以查看一下是查看到什么文件的时候程序就闪退了。代码脚本如下
function hook_open() {  var pth = Module.findExportByName("libc.so""open");  Interceptor.attach(ptr(pth), {    onEnterfunction (args) {      this.filename = args[0];      console.log(""this.filename.readCString());    }, onLeavefunction (retval) {      return retval;    }  })}setImmediate(hook_open);
执行结果如下,可以根据结果进行两点判断。
1.确实程序是使用了libc.so中的open函数进行读取文件的
2.是读取到进程下的/task目录中的某一子线程的status文件就闪退的(这里关于被调试状态的进程的status文件的变化就不赘述了,网上有许多的文章)
某APP加密解密
于是我们的思路就有了,可不可以hook open函数发现它在读取task文件夹下的文件的时候就重定向文件到一个我们伪造的文件呢?代码如下,就是我们hook住open函数,然后如果发现它的入参存在task关键字,就定位到我们要它读的/sdcard/status文件去,从而伪造一下手机的状态,尝试绕过frida反调试。
function redirect(src, dest) {  var openPtr = Module.getExportByName('libc.so''open');  var open = new NativeFunction(openPtr, 'int', ['pointer''int']);  Interceptor.replace(openPtr, new NativeCallback((pathPtr, flags) => {    var path = pathPtr.readUtf8String();    var originPath = Memory.allocUtf8String(src);    var currentPath = Memory.allocUtf8String(dest);    var fd = -1;    if (path.indexOf("task") > -1) {      var targetPath = Memory.allocUtf8String(dest);      fd = open(targetPath, flags);    }    else {      // console.log('open file "' + path + '"');      fd = open(pathPtr, flags);    }    return fd;  }, 'int', ['pointer''int']));}function main() {  //hook_open();  redirect("task""/sdcard/status");}setImmediate(main);
很好!已经成功可以注入进frida了
某APP加密解密
3.定位加密算法
这里我们抓包看一下数据包的样子,抓到的是如下形式的数据包,可以看到我们无法定位到关键的特征比如关键参数等等,那就只能搜索常用的加密类了,比如Crypto
某APP加密解密

于是我们启动objection尝试搜索是否存在这种加密类,注意这里那边注入bypass的frida不要放开,还是要一直注入,然后objection这里呢要使用APP的名字注入,这样是attach模式,可以同时和frida一起注入脚本。
使用android hooking search classes Crypto命令搜索到了152个相关的类。
某APP加密解密之后我们将搜索出来的结果放到一个txt中,发现有两个不常见的类,因为其余都是安卓自带的以及Java的库,这种情况其实要优先查看开发自写的类的。
某APP加密解密
于是我们来hook这两个类
某APP加密解密然后找到登录的位置,发送一个数据包,可以看到执行结果如下
某APP加密解密
可以定位到com.rytong.emp.net.CryptoHttpManager这个类在进行加密,于是我们其实可以hook handleRequestBody()方法,顾名思义它是处理请求体的方法,盲猜一下加密就在这里
某APP加密解密然后再发一次包,可以看到第一个参数是明文的发送的接口,第二个我觉得应该就是加密前的明文的byte数组。
某APP加密解密到这里objection就不能将byte数组转换成我们可以看懂的字符串了,需要去编写frida脚本了。
function main() {  Java.perform(function () {    var CryptoHttpManager = Java.use('com.rytong.emp.net.CryptoHttpManager');    var StringClass = Java.use('java.lang.String');    CryptoHttpManager.handleRequestBody.implementation = function () {      console.log('\nURL ===> 'arguments[0]);      console.log('\nData ===> 'StringClass.$new(arguments[1]));      return this.handleRequestBody(arguments[0], arguments[1]);    }  })}setImmediate(main);
我们直接使用attach模式注入APP中可以看到,获取到了明文
某APP加密解密

微信:MiNi_login 拉群
欢迎各位师傅加入我们~~~~
某APP加密解密

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月14日09:57:15
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   某APP加密解密https://cn-sec.com/archives/3836242.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.