随笔分类 - android逆向
摘要:逆向so,unidbg这种模拟器必不可少,其优势: ida、frida遇到了严重的反调试 生产环境生成sign字段(配合springboot尤其方便,有现成的框架可以直接拿来用了:https://github.com/anjia0532/unidbg-boot-server) 可以打印JNIEnv成
阅读全文
摘要:1、古人云:没有规矩,不成方圆!任何组织要想正常运作,肯定需要有一系列的规章制度来约束参与其中的每个个体,否则每个个体都是各干各的,从全盘来看就是一群做着布朗运动的散沙!IT技术也一样,最典型的就是计算机网络了:为了确保整个网络能正常收发数据包,早在几十年前就制定了一整套计算机网络的通信协议,这就是
阅读全文
摘要:1、AES也是一种非常成熟的对称加密算法了,整个流程如下: 可以看到流程比较复杂,步骤很多,很多初学者光是看这个流程就晕菜了。这么多步骤,每个步骤都是干啥了?分别都有啥用了?理解了每个步骤的原理和作用,才能更好的魔改和识别魔改! (1)先回到加密算法最核心的作用或本质: 让明文和密文之间没有明显的统
阅读全文
摘要:1、MD5是业界非常成熟的hash算法了,原理不再赘述,这里介绍一下可以魔改的地方! (1)MD5默认输出是128bit,怎么改变这个长度了?MD5的结果是由4个32bit的ABCD组成的,原始取值如下: unsigned int A = 0x67452301; unsigned int B = 0
阅读全文
摘要:搞逆向,hook是必备的基本技能之一,常见的hook工具有xpose、frida等。这些hook框架出来的时间都有好多年了,历史悠久,用的人也多,影响范围非常大,导致app开发商也会重点检测和防御。现在规模稍微大一点的开发商都会针对xpose、frida做各种防护,导致部分场景下使用xpose、fr
阅读全文
摘要:1、万丈高楼平地起,正常人都知道高楼大厦地基的重要性!现代产业链的成熟,让产业分工越来越明细,很少有公司或团队能完整地提供产业链上每个环节的产品,很多都是基于某个厂家上游的产品继续做下游的开发,典型的如应用app开发,肯定要基于操作系统提供的api接口;同理,操作系统的开发需要基于cpu提供的汇编指
阅读全文
摘要:低版本x音client会验证server的证书,所以把抓包软件的证书安装在android系统后就可以冒充server欺骗client抓包了;但是后来的高版本libttboringssl.so中调用了SSL_CTX_set_custom_verify来设置server对client的验证,这下抓包软件
阅读全文
摘要:1、上次自己构造了一个app来调用x音的关键so,结果在一条“LDR R0, [R4,#0xC] “语句卡住了:通过ida查看得知:R4就是第三个参数,这里被当成了地址使用(java层怪不得用long类型)!第三个参数我是用frida hook得到的,换了个环境地址肯定也变了,所以这里直接”抄袭“拿
阅读全文
摘要:之前逆向中,通过ida栈回溯找到了一些函数,但分析起来还是费劲,主要的痛点: 代码量大:libmetasec_ml的text段从0x7c50开始,0x84170结束;粗略估计代码超过13万行(这还不包括init段的代码); ; 尝试着用CE在内存中找各种加密的magic number、url,然后下
阅读全文
摘要:1、上次通过hook registerNativeMethod找到了metasec种唯一注册的jni函数,本想着通过trace call来看看到底这个函数层层调用了哪些函数,结果trace出来的结果完全是错的(用hook到的地址调用findModuleByAddress确认哪个so,直接报异常!),
阅读全文
摘要:上周用ida调试x音的时候遇到了大量的弹窗,要是一不小心选择了“pass to app”,结果大概率直接崩掉......... 弹窗这个问题困扰我好久了,如果不解决,后面的trace就没法做了,该怎么解决了?这就要从弹窗的原理说起了!近期用ida调试时遇到的弹窗提示整理如下: 3B745B60: g
阅读全文
摘要:上次用ida标记unidbg trace得到的指令时遇到如下报错: from PyQt5 import QtCore, QtWidgets, QtGui ImportError: DLL load failed: %1 不是有效的 Win32 应用程序。 当时就有好些小伙伴给我支招,我尝试后发现确实
阅读全文
摘要:静态分析sscronet和metasec_ml走不通了,换个思路继续搞! 1、直接打开从内存dump的so,报错如下: 本以为只是简单破坏了文件头,于是用010editor比对内存dump的so和安装包原始的so,看看哪些地方被破坏了,手动挨个恢复;结果发现两个so长度都不同了(结构都被改了),而且
阅读全文
摘要:上次找到了两个关键的so:sscronet和metasec_ml,本想着用jni trace看看jni函数的加载顺序、参数、地址等关键信息,结果大失所望:一个都没有....... 仔细想想原因:要么是没用到,要么是加密了! 继续用ida打开mestasec_ml:发现导出函数列表发现大量的函数名都加
阅读全文
摘要:前面介绍了PC端hook关键函数得到xxxx客户端消息,也导出了sqlite数据库;事实上,xxxx官方的答复是xxxx不会存用户的消息,所有的消息就只能存客户端的sqlite数据库,红包消息也不例外;那么通过sqlite数据是不是可以判断当前的消息是不是红包了?com.tencent.wcdb.d
阅读全文
摘要:逆向时用frida hook java层相对比较简单,找准hook点用objection就行!或则自己写脚本hook java常见的加密/编码也很简单,核心原因就是类名、函数名称得以保留,逆向人员能快速定位!java层常见的加密/编码hook脚本这里有:https://www.cnblogs.com
阅读全文
摘要:1、上次用打印堆栈的方法找到了libc中malloc函数的调用堆栈,仔细一看都是标准库的调用,没找到x音自己库的调用关系,这条线索自此又断了!想来想去,还是老老实实根据method profiling的调用栈挨个查找吧!原因很简单:因为用户操作的所有java层执行逻辑都被记录了,这里肯定有生成X-L
阅读全文
摘要:1、对于逆向工作而言,最重要的工作内容之一就是trace了! 目前trace分两种场景: (1)dex-VMP壳、java层关键(比如加密)代码定位:这时需要trace函数的调用关系,目前已有android studio自带的method profiling工具可以干这事! (2)so层代码定位:
阅读全文
摘要:1、从kanxue上拿到了一个VMP样本,用GDA打开,发现是数字壳;从androidMainfest可以找到原入口,但是已经被壳抽取了,如下: 这种情况我也不知道加壳后的apk从哪开始执行(之前分析的壳都是从壳自定义的MainActivity开始,这里还是保留了原入口,但从包结构看原入口已经没了)
阅读全文
摘要:为了保护代码、干扰静态分析,android客户端可以通过OLLVM干扰整个so层代码执行的控制流,但不会改变函数调用的关系,所以抓住这点并不难破解OLLVM;另一个大家耳熟能详的代码保护方式就是VMP了!我之前介绍了windos下VMP代码混淆的原理,其实在android下也类似:对原来的smail
阅读全文