1.FartExt超进化之奇奇怪怪的编译编译新ROM工具MikRom
2.关于Cocos2dx-js游戏的jsc文件解密
3.Android 逆向安全行业前景如何?
4.Android app的加壳和脱壳详解
5.Frida常用api大全
FartExt超进化之奇奇怪怪的新ROM工具MikRom
本文为看雪论坛优秀文章
在对ROM进行深入定制的探索中,作者分享了自己开发的编译编译两款工具:FartExt和MikRom。FartExt是编译编译一个自动脱壳机,基于FART主动调用的编译编译思想,对特定的编译编译抽取壳进行优化处理。其核心功能是编译编译青蛙换位游戏源码对FART进行简单优化,但由于当时实现功能并不完善,编译编译只短暂提供下载地址后便删除。编译编译现在,编译编译FartExt的编译编译开源代码已发布在GitHub上。
随着对ROM定制的编译编译深入思考,作者尝试将FartExt的编译编译原理应用到更广泛的场景,例如构建ROM级别的编译编译打桩工具,或通过应用读取配置文件实现网络流量拦截、编译编译JNI函数调用追踪等功能。编译编译基于这些想法,MikRom应运而生。MikRom提供了一系列功能,包括内核修改、USB调试默认连接、脱壳(支持黑名单、白名单过滤、主动调用链优化)、ROM打桩、frida持久化、反调试、Java函数trace、危废erp 源码内置dobby注入、so和dex注入等。目前,MikRom的开源代码在GitHub上发布。
为了使MikRom的配置管理更方便,作者开发了一个界面化的工具MikManager,允许用户通过图形界面进行操作。MikManager将设置保存到文件中,MikRom在启动时读取并解析这些设置。MikManager界面简洁,如有需要,用户也可自行开发界面管理工具。
开发MikRom及其相关工具是一项耗时而复杂的工作,作者记录了整个开发历程,分享了在试错过程中找到的解决方案。在功能实现和界面设计上,作者表示仍存在不足,欢迎其他开发者指出错误或提供改进意见。在考虑法律和风险问题时,作者表示愿意进行修改。
在ROM编译版本的选择上,作者最初使用了aospr2源码进行修改编译。后有建议改进界面,于是参考hanbingle老师的Fart脱壳王使用的rom,选择了PixelExperience进行修改。编译时遇到了错误,tagui获取网页源码需要对build文件进行调整。最终,作者使用了marlin版本进行编译,并在pixel XL上测试。
在配置管理优化方面,早期的FartExt配置文件存储在/data/local/tmp中,由应用启动过程解析。然而,随着配置管理的复杂性增加,作者引入了一个系统服务来管理配置文件,将文件落地到/data/system目录中,供所有应用访问。这解决了不同应用访问配置文件的权限问题。
了解更多详情,请阅读:FartExt超进化之奇奇怪怪的新ROM工具MikRom
关于Cocos2dx-js游戏的jsc文件解密
上一期关于Cocos2dx-js游戏的jsc文件解密教程后,收到不少同学反馈,提出了相关问题。本文将对这些问题进行初步分析,并提供一些解答。
首先,通过官网下载CocosCreator开发工具并构建编译,发现有脚本加密选项。构建后的样本APK中,通过Jadx-gui进行java层源码分析,了解到assets目录下二进制源代码的加载情况。在入口Cocos2dxActivity处,开源发卡平台源码有一个onLoadNativeLibraries函数加载libcocos2djs.so文件。在AndroidManifest.xml中找到其定义为cocos2djs。
初步分析显示,脚本加密操作可能发生在非java层,因此将研究对象转移至libcocos2djs.so文件。通过阅读Cocos2dx源码,发现其使用xxtea加密和解密。CocosCreator构建项目过程则相反,运行时进行解密操作。
为了获取Key值,我们以两个游戏案例进行分析。游戏A中,将libcocos2djs.so文件拖入十六进制编辑器搜索ASCII字符串"Cocos Game",未找到相关信息。使用IDA分析libcocos2djs.so文件,发现函数名简洁,未进行安全处理。搜索xxtea / key函数,找到相关函数。尝试直接在so层获取Key值,发现jsb_set_xxtea_key函数可能设置Key。通过回溯,找到了游戏A中的Key值(v),使用该值成功解密jsc文件。
游戏B的分析类似,同样在jsb_set_xxtea_key函数中找到Key值(v),苹果cms源码架设并通过附近的字符串找到可疑的Key值和Cocos Game。尝试使用此Key值解密,同样获得成功。对比游戏A中的密匙,发现都位于applicationDidFinishLaunching函数内,可能为新的找Key值的关键。
通过阅读相关源码,了解Cocos2d-x应用入口中加载完成时回调的方法。结合CocosCreator构建项目过程,理解游戏应用环境加载完毕后,Key值传入解密函数中,解密文件化为js文件,并在内存中拷贝,游戏调用js文件进入游戏界面。
在其他关键函数分析中,可以进一步探索解密过程。例如,在xxtea_decrypt函数中观察memcpy和memset操作,以及do_xxtea_decrypt函数的大量计算。结合CocosCreator源代码,可以确定传入参数中的Key值。使用Frida框架在游戏运行时Hook xxtea_decrypt函数,通过简单的js脚本直接获取Key值,操作相对简单。
关于解密工具,获取Key值后,直接参照CocosCreator源代码实现解密逻辑即可。此外,网上也存在一些封装好的加解密程序,如jsc解密v1.,可满足当前Cocos2dx版本的文件加解密需求,操作较为简单。
总结,通过初步分析和实例探索,已经提供了一些解密Cocos2dx-js游戏jsc文件的关键步骤和方法。欢迎交流和分享更多见解。
Android 逆向安全行业前景如何?
Android逆向工程是指对已发布的Android应用进行分析和研究,揭示其底层实现原理、业务逻辑、源代码以及恶意行为等。这项工作对应用安全性至关重要,能帮助开发者识别和修复漏洞,提高应用安全性和稳定性。逆向工程通常包括反编译、分析应用代码、知识运用以及解密应用数据等步骤。 随着移动应用的普及,逆向工程的重要性日益凸显。具备相关技能的专业人才将变得越来越受欢迎和需求。在学习Android逆向时,基础技能的掌握至关重要。以下为学习路线整理:Smali指令
加壳与脱壳
Xposed框架
Frida
抓包
加密与解密算法
参考学习笔记:[链接](qr.cn/CQ5TcL) Android逆向工程的前景广阔。随着技术的发展和应用安全性的提高,对专业技能的需求将持续增加。了解Android逆向与安全的学习路线,掌握关键知识点,将有助于提升个人竞争力,并在该领域取得成功。Android app的加壳和脱壳详解
了解Android应用的加壳与脱壳技术,我们首先需要理解APK文件结构与DEX文件原理。APK文件是Android应用的压缩包格式,解压后包含dex文件,这是Dalvik虚拟机执行的字节码文件。Zygote作为虚拟机进程,每次启动应用时生成子进程执行该应用。加壳技术在二进制程序中植入代码,加密、隐藏或混淆原始内容,以防止反编译。加壳后的APK在运行时,首先解压并获取编译信息,运行加密的DEX文件。
实现加壳,主要是为保护内容加密、隐藏或混淆,使得反编译难以直接获取原始代码。脱壳则是反过程,目标是恢复原始代码。脱壳需要解压并定位到真实DEX文件,通常是在解密后执行脱壳,然后dump出明文状态的DEX文件。实现脱壳的关键是获取解密后DEX文件的起始地址与大小。
常用脱壳方法包括基于Frida的工具,如Frida-Dexdump,帮助定位并dump脱壳后的DEX文件。此工具需要配合frida-server在模拟器或手机上运行,并利用frida-ps查看目标应用。接着通过指定应用包名调用Frida-Dexdump工具进行脱壳。脱壳后的文件可能需要通过合并工具(如jadx)整合为一个文件,并最终使用如jd-gui进行查看。另外,Fart、Youpk、BlackDex等工具也提供了不同的脱壳解决方案,覆盖了不同条件与需求,包括修改Android源码、基于ART的主动调用、无需root的脱壳等。
每种脱壳工具都有其优势与局限性,如Frida-Dexdump与Frida环境结合简单,但可能受限于目标应用的具体保护方式;Fart与Youpk则需要特定条件与环境,但提供了更强大的脱壳能力;BlackDex则以其简便易用、无需root等特性,成为一种通用脱壳工具。然而,无论使用何种脱壳工具,都需要基于深入理解DEX文件结构与保护机制,以及对特定工具的特性与使用方法的掌握。
Frida常用api大全
完整内容及源码关注公众号:ReverseCode,发送冲
静态函数使用方式为 "use",而动态函数则通过 "choose" 来调用。
在修改变量时,静态变量使用 "use",动态变量则使用 "choose"。
构造函数的主动调用可以使用Hook,枚举类的所有方法则需要遍历类的每个成员函数。
当方法名被混淆时,可以使用编码后的字符串hook,进行打印类名。如遇到特殊不可见字符,使用编码后的字符串进行hook。
通过wallbreaker可以枚举所有类,获取指定包下所有类的接口实现。在多个ClassLoader环境下,可以枚举指定类所有关联的接口实现和父子类关系。
Hook Char&ByteHook、MapHook、重载Hook、内部类Hook、匿名类Hook、枚举类Hook,以及动态加载dex都是Frida中常用的方法。
在经常遇到加壳app的情况下,可能无法正确找到正常加载app类的classloader,这时可以使用动态加载dex的方法解决。
调用栈的打印可以帮助我们跟踪类的调用路径,手动注册类Hook可以在特定场景下实现功能。然而,如果在主线程运行时出现错误,如on a thread that has not called Looper.prepare(),需要进行适当的错误处理。
在过滤打印时,有时需要禁止退出。修改设备参数请求调用栈上下文时,需要确保正确使用Context。
RPC(Remote Procedure Call)是另一种调用远程服务的方法,通常需要进行强制类型转换以确保数据的正确传输。
常用算法如base编码,可以使用常用转换模板进行快速实现。
本文由博客一文多发平台 OpenWrite 发布!