-
-
[原创]RC4、Base64魔改看雪CTF-变形金刚学习笔记
-
发表于:
2020-10-7 11:27
14967
-
[原创]RC4、Base64魔改看雪CTF-变形金刚学习笔记
最近在研究某某app的数据库,发现自己在so层的调试比较薄弱,专门找了看雪的CTF-变形金刚来学习。希望在用ida调试so方面有所突破。
利用国庆期间整理成笔记。技术不成熟或许描述的不够清晰请大伙见谅。
也拜读了几位大佬的文章。
为了熟悉该app,先介绍一下大神分析后的结果。
输入错误密码截图
比如输入密码是:12345678,会提示错误信息:Transformers:error
输入正确密码截图
输入密码(长度16个字符)是:fu0kzHp2aqtZAuY6,会提示错误信息:Transformers:flag{android4-9}
把Transformers.apk拖入jadx
障眼法1:该app设计作者采用了障眼法,很容易欺骗分析人员,让我们认为OnClick的回调处理逻辑在MainActivity中。
障眼法2:在MainActivity的OnCreate中欺骗代码注册OnClick回调。主要原理是利用Activity的onStart事件会晚与OnCreate事件,从而实现在OnStart中注册的OnClick回调覆盖了OnCreate中注册的回调。
Activity基类的onStart才是真正注册OnClick回调的地方
为了方便理解eq中涉及的魔改的Base64编码,这里先贴上一直Base64解码的草稿图
下图是Base64编码4个字符'{6*的解码草稿图,画的不是很好,主要是方便我自己理解写解码Base64的逻辑代码。
它是用64个可打印字符表示二进制所有数据方法。由于2的6次方等于64,所以可以用每6个位元为一个单元,对应某个可打印字符。我们知道三个字节有24个位元,就可以刚好对应于4个Base64单元,即3个字节需要用4个Base64的可打印字符来表示。
这里将分3个关键步骤:
这里先列一下分析结果
1:搜索JNI_OnLoad,双击进入函数体
2:导入Jni.h文件。菜单路径:ida/File/Load file/Parse C header file
3:修改参数类型为_JavaVM
4:按g快捷键直接跳转到0x4014
off_4010即可看到注册的函数
找到eq注册对应的sub_784函数
当然frida的hook_art_so_register.js脚本快速定位eq对应sub_784
该脚本通过hook art.so 的register函数,打印动态注册的地址
或直接在fini_array初始化数据中可以看到
另外根据so文件的加载流程应该是先加载init_array,然后是JNI_OnLoad
ida 中ctrl+s 进入init_array,会先执行.datadiv_decode5009363700628197108,其实就是通过一些运算得到一些初始化数据。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2020-10-7 12:42
被younghare编辑
,原因: