fridaԴ??
详解Hook框架frida,让你在逆向工作中效率成倍提升
一、frida简介
frida是一款基于python + javascript的hook框架,支持运行在各种平台如android、幸运五星源码ios、linux、win、osx等。主要通过动态二进制插桩技术实现代码注入,收集运行时信息。
插桩技术分为两种:源代码插桩和二进制插桩。源代码插桩是将额外代码注入到程序源代码中;二进制插桩则是将额外代码注入到二进制可执行文件中。其中,静态二进制插桩在程序执行前插入额外代码和数据,生成永久改变的可执行文件;动态二进制插桩则在程序运行时实时插入额外代码和数据,对可执行文件无永久改变。
二、frida的安装
frida框架包括frida CLI和frida-server两部分。frida CLI是用于系统交互的工具,frida-server则用于目标机器上的代码注入。
1. frida CLI安装要求包括系统环境(Windows、macOS、GNU/Linux)、Python(最新3.x版本)等。通过pip安装frida CLI,frida CLI是frida的主要交互工具。
2. 分别下载frida-server文件(格式为frida-server-(version)-(platform)-(cpu).xz),并根据设备类型选择对应的版本。下载文件后解压,将frida-server文件推送到Android设备,添加执行权限并运行(需要root权限)。
3. frida还提供了其他工具,如frida-ps用于列出进程,frida-trace、frida-discover、frida-ls-devices、frida-kill等。这些工具用于不同场景,具体使用可参考frida官网。购买源码怎么可靠
三、frida Hook实战
通过制作类似微信抢红包的插件来演示frida的使用。首先拦截微信信息持久化到本地的接口(com.tencent.wcdb.database.SQLiteDatabase的insert()方法),解析获取每条信息的内容、发送者等信息。
抢红包流程分析:点击打开红包时,执行请求(ad类)发送抢红包的请求。需要的参数包括头像、昵称、发送者信息等,参数主要来自luckyMoneyReceiveUI.kRG类。通过解析解析参数,发送com.tencent.mm.plugin.luckymoney.b.ag类请求,并获取timingIdentifier,最后发送com.tencent.mm.plugin.luckymoney.b.ad类请求即可抢到红包。
四、模拟请求
分析微信的请求发送方法,通过frida实现请求发送。主要通过反射获取发送请求的Network,然后调用其a方法发送请求。解析红包信息,发送ag请求并获取timingIdentifier,改造SQL的insert方法,实现抢红包插件。
附录
实验环境包括微信版本6.6.7、frida版本.0.、frida-server版本、Android版本7.0等。ISEC实验室作为网络安全服务提供商,专注于网络安全技术研究,提供全面的网络安全服务和解决方案。
欲知己之所防,先知彼之所攻——论Hook 技术的攻防对抗
矛盾的同一性与斗争性原理几乎适用于所有攻防对抗。
在设备指纹攻防对抗中,当硬件属性不再作为设备指纹的唯一属性时,为了保证设备指纹的唯一性,需要在硬件ID的基础上增加更多识别标准以及动态可变的算法。黑灰产在尝试绕过设备指纹进行攻击时,会通过“伪装”自己的设备来实现攻击目的,比如让App认为设备是编程代码和源码一个新手机,或伪造受害者的手机进行身份认证。然而,有矛必有盾,安全研究者同样会利用Hook技术来对抗此类攻击。
Hook技术是一门广泛用于计算机攻防对抗的技术,它能够监视系统或进程中的事件消息,截获并处理目标窗口的消息。使用Hook技术的人可以被视为“钓鱼人”,而Hook技术则相当于“渔具”,系统中的事件消息就像“游鱼”,钓鱼人通过Hook技术将其捕获(Hook技术一般是有指向性的),然后对事件进行修改,使之继续正常运行。Hook技术常用于热补丁上线、API劫持、软件破解等技术操作。
在Android平台,Hook框架主要分为三类:针对Native层的Hook框架、针对Java层的Hook框架(如Xposed)以及全平台Hook的Frida框架。针对移动设备的Hook技术主要以手机为主,其中Android的Hook框架主要包括bhook、xhook、yahfa等针对Native层的框架,以及Xposed类框架和Frida框架。
在攻防对抗中,如何利用Hook技术进行攻击?首先,需要对目标应用进行反编译分析,了解其功能和内部逻辑。然后,编写Hook插件,修改目标应用的关键方法,实现对特定参数的控制,从而获取其MD5值等敏感信息。在实现Hook攻击时,需要遵循特定的前置条件和步骤,如创建xposed_init文件、配置AndroidManifest.xml、编写Xposed Hook模块等。
针对Hook攻击的防御方式同样重要。除了通过检测ClassLoader来识别Xposed框架的ip信息源码使用,还可以采用其他传统防御方法。顶象产品具备独有的对抗方式,包括反检测、反对抗技术,可以更准确地识别Hook风险。在攻防对抗方面,安全厂商需要持续不断的努力,以保持技术的领先性。
顶象技术已实现对安卓、iOS、H5、小程序等全方位的安全保护,有效防御调试、注入、多开、内存Dump、模拟器、二次打包和日志泄露等攻击威胁。顶象产品还支持对iOS免源码加固,并具备“蜜罐”功能,保护Android 种数据和文件,提供7种加密形式。
APP安全检测的必要性!北京软件安全测试
随着智能手机等移动终端设备的普及,应用客户端上网成为常态。智能终端的普及推动了移动互联网的发展,移动应用数量暴增。然而,这同时也导致了对安全需求的迫切增长。APP面临多种安全威胁,如木马、病毒、篡改、破解、钓鱼、二次打包、账号窃取、资源篡改、广告植入、信息劫持等。电脑看直播源码因此,对APP进行安全检测势在必行。这不仅能够提高应用的稳定性和安全性,而且对于防止用户数据泄露、保护用户隐私、维护品牌形象和信任至关重要。
常用的安全测试工具有:
1. Needle:一种面向iOS应用安全评估的模块化开源框架。它帮助测试人员简化安全测试活动,同时开发人员可以利用它来提高代码安全性。
2. DevSlop:一个OWASP子项目,专注于深入研究DevOps管道安全性。它提供不同模块来评估应用程序的易受攻击点、管道和DevSlop Show功能,有助于全面加固DevOps管道安全性。
3. 移动安全框架:一个多功能的自动化移动应用渗透测试框架,能够执行动态分析、静态分析、Web APT测试和恶意软件分析。它适用于iOS、Android和Windows等平台,提供快速有效的安全性分析。
4. Frida:面向逆向工程师、开发人员和安全研究人员的动态工具包,实现应用程序钩子功能。用户可以将脚本放入黑盒进程中,监视与跟踪私有程序代码,而无需应用源代码。
最后,信息系统上线前通常需要进行安全测评,通常由具有资质的第三方检测机构进行,并出具权威的软件系统安全测评报告。此报告不仅为后续申报省、市科技项目、企业申请中小企业创新、科技项目验收、科技成果鉴定等提供第三方检测机构评测报告证明材料,而且能够为企业提供安全保障、增强用户信任和维护品牌形象。
APP抓包大全
一、抓包细节点拨
确保手机信任安装的证书,并将其放置在系统目录(1),同时务必校准手机时间至当前,以便获取精确信息。移动证书至根目录,magisk的move certificates模块为这一过程提供了便捷(2)。二、多元抓包手段
设置手机代理,使用burp进行常规抓包(1)
通过手机转发流量,启用burp的透明代理功能,实现更深入的包监控(2)
在linux环境中,通过无线共享和流量转发,利用mitm工具进行抓包(3)
,关注特殊发包框架的调整()
Flutter应用抓包,参考"Flutter应用逆向抓包",关注全局代理设置()
微信小程序抓包,降低微信版本有助于抓包()
WSS抓包,charles的socket5模式是关键()
tcp、udp抓包挑战,wireshark直视,寻求更高效分析法()
四、灵活运用与总结
以上抓包顺序、hook框架和工具的搭配需根据具体情况灵活调整,结合其他工具的特性,发挥你的创造性思维()。更多实用技巧,参考以下文章进行深入学习:1: 深入探讨链接
2: 文章一
3: 文章二
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文件结构与保护机制,以及对特定工具的特性与使用方法的掌握。
关于Cocos2dx-js游戏的jsc文件解密
上期关于Cocos2dx-js游戏的jsc文件解密教程引发了一些疑问,本文将解答一些常见问题。
首先,我们通过CocosCreator开发工具构建并编译一个案例js工程,发现游戏中存在脚本加密选项。构建后,得到一个简单的样本APK。在APK中,我们通过Jadx-gui工具解析Java层源码,关注assets目录下二进制源代码的加载情况。在入口Cocos2dxActivity的onLoadNativeLibraries函数中,我们找到了加载libcocos2djs.so文件的步骤,该文件位于AndroidManifest.xml中。
初步分析显示,加载Assets目录资源的操作不在Java层进行。接着,我们参考“jsc反编译工具编写探索之路”一文,将注意力转移到libcocos2djs.so文件上。在Cocos2dx源码中,我们发现其使用的是xxtea加密和解密算法,与Cocos2dx-lua的加密解密过程类似。
在游戏实例分析部分,我们以两个游戏案例为例进行解密。对于游戏A,通过十六进制编辑器搜索libcocos2djs.so文件中的Cocos Game字符串,未发现相关信息。使用IDA分析工具对libcocos2djs.so进行深入研究,发现导出函数名清晰,没有添加额外的安全手段。通过搜索xxtea / key相关函数,我们找到了几个相关函数。在jsb_set_xxtea_key函数中,我们尝试直接设置key值,并发现一个可疑的参数v,用于解密jsc文件。通过回溯该函数的调用路径,我们成功获取了Key值,并成功解密游戏文件。
对于游戏B,虽然Key值不像游戏A那样明文显示,但通过搜索附近的字符串,我们发现可疑的Key值与常规的Cocos Game字符串共存。尝试使用此Key值解密游戏文件,同样取得了成功。对比游戏A和游戏B的关键代码,我们发现密匙都在applicationDidFinishLaunching函数内部体现。此函数在Cocos2d-x应用入口中,当应用环境加载完成时回调。理解CocosCreator构建项目的过程后,我们知道游戏应用环境加载完毕后,该函数内部将Key值传入解密函数中,解密函数将jsc文件转换为js文件,并拷贝到内存中,游戏开始调用js文件,进入游戏界面。
在其他关键函数的分析中,我们注意到在xxtea_decrypt函数中存在memcpy和memset操作,表明在进行内存拷贝数据。通过CocosCreator源代码jsb_global.cpp文件,我们得知传入xxtea_decrypt函数的第三个参数即为解密的Key值。因此,我们可以通过Hook libcocos2djs.so文件加载时的xxtea_decrypt函数来获取Key值。使用Frida框架编写简单的js脚本进行Hook操作,可以成功获取Key值。在获取Key值后,可以参照CocosCreator源代码实现解密逻辑,或者利用封装好的解密程序进行文件解密。
最后,对于解密工具的选择,我们推荐使用一些已封装的加解密程序,例如jsc解密v1.,它能够满足当前Cocos2dx版本的文件加解密需求,并提供较为简单的操作方法。同时,欢迎各位分享自己的解密方法和见解,共同推动社区的发展。
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 发布!
2024-11-29 23:30
2024-11-29 22:47
2024-11-29 22:47
2024-11-29 22:08
2024-11-29 21:57