CTF001

xiaoeryu Lv5

用jadx分析代码逻辑

先查一下程序没有加壳,用jadx打开apk查看代码

通过_AndroidManifest.xml找到程序的入口点可以看到提示的字符串
然后因为它处理flag的函数是在native层所以我们需要用ida去查看这个函数是怎么在so文件中实现的
用解压缩软件取出apk的lib库中的so文件,用ida去分析一下
ida分析完后在文件中我们可以直接搜索
java开头的函数_或者直接搜索verify这个函数,有可能可以直接搜索到
如果我们搜索不到verify这个函数的时候也许这个函数是动态注册的,可以通过JNI_OnLoad去查找加载的函数
JNI_OnLoad()函数是Java Native Interface(JNI)中的一个特殊函数,它在加载本地库时由Java虚拟机调用,它主要用于初始化本地库,并返回JNI的版本号给虚拟机。

但是这里ida分析的参数有点错误

修复IDA参数识别错误

看一下JNI_OnLoad()的代码示例

我们需要去找这个RegisterNatives()方法中的第三个参数methods来找到注册的本地方法,但是上面IDA识别的有问题需要手动修改一下参数的类型

修复完成

定位动态注册函数地址

进来之后就可以定位到动态注册的函数位置

进来之后发现这是一个简单的算法验证器,对数组的每一位进行了校验

验证Flag

先验证一下长度,然后对每一位进行验证全部相等就返回true,我们可以将这些验证的数字转译对应的ascii码,或者直接按table键进入反汇编页面就能看到IDA自动解析的字符编码

将字符串输入验证

  • 标题: CTF001
  • 作者: xiaoeryu
  • 创建于 : 2023-07-09 14:55:38
  • 更新于 : 2023-07-09 15:01:32
  • 链接: https://github.com/xiaoeryu/2023/07/09/CTF001/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论