安卓逆向|菜鸟的FRIDA学习笔记:如何使用FRIDA调用so文件里的函数

举报
悦来客栈的老板 发表于 2020/12/29 00:41:02 2020/12/29
【摘要】 本文致谢 本篇文章学到的内容来自且完全来自r0ysue的知识星球,推荐一下(这个男人啥都会,还能陪你在线撩骚)。 样本及详细分析思路在某大佬的这篇文章里: https://www.52pojie.cn/forum.php?mod=viewthread&tid=1142980&highlight=XCTF 作者使用的是在线的AES解密得出了flag,思路...

本文致谢

本篇文章学到的内容来自且完全来自r0ysue的知识星球,推荐一下(这个男人啥都会,还能陪你在线撩骚)。

样本及详细分析思路在某大佬的这篇文章里:

https://www.52pojie.cn/forum.php?mod=viewthread&tid=1142980&highlight=XCTF

  

作者使用的是在线的AES解密得出了flag,思路非常的棒!我在这里尝试直接调用so层的函数,也可以解密被加密的字符串

"9YuQ2dk8CSaCe7DTAmaqAA=="

  

首先我们需要确定的有三点:

  1. 函数的实参类型

  2. 函数的返回类型

  3. 如何在frida构造及读取这些类型

因为app没有主动调用这个 AES_128_ECB_PKCS5Padding_Decrypt 函数,可以在ida中尝试猜出它的实参及返回类型

由图中均可以看到,实参和返回类型都是const char* 类型,而且

1.第一个实参是待解密的字符串:"9YuQ2dk8CSaCe7DTAmaqAA=="

2.第二个实参就是AES的key:"thisisatestkey=="

直接使用这样的实参肯定是不行的,需要使用frida提供的方法进行构造:

Memory.allocUtf8String

  

而读取const char* 类型的数据需要使用:

Memory.readCString

  

怎么去调用这个函数,frida提供了NativeFunction方法,具体使用方法参见这里:

https://frida.re/docs/javascript-api/#nativefunction

  

它这么定义的:

new NativeFunction(address, returnType, argTypes[, abi])

  

参数 address,表示需要构造的函数在内存中的地址,returnType是函数的返回类型(const char*),不过frida中不用这个,需要使用 pointer,所以构造出来是这样的:

var aes_128 = new NativeFunction(aes_addr , 'pointer', ['pointer', 'pointer']);

  

现在基本思路都差不多了,写成的代码是这样的:


   
  1. function main()
  2. {
  3. Java.perform(function () {
  4. var aes_addr = Module.findExportByName("libJNIEncrypt.so","AES_128_ECB_PKCS5Padding_Decrypt");
  5. var aes_128 = new NativeFunction(aes_addr , 'pointer', ['pointer', 'pointer']);
  6. var encry_text = Memory.allocUtf8String("9YuQ2dk8CSaCe7DTAmaqAA==");
  7. var key = Memory.allocUtf8String('thisisatestkey==');
  8. console.log("The result is: ",Memory.readCString(aes_128(encry_text ,key )));
  9. });
  10. }
  11. setImmediate(main)

运行结果如下图:

文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq523176585/article/details/109508048

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。