免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。
1
Start
收到不少师傅的反馈,大家普遍认为 Yakit 是一个非常实用的工具,但在热加载的脚本编写上却有些劝退,主要原因可能还是大家平时事务繁忙,难以抽出时间去深入了解这套相对陌生的脚本语言。为了降低大家的上手门槛,今天这篇内容将快速赋能,重点介绍一些热加载中常见的使用场景及其编写方式,帮助大家更高效地完成自动化调试和分析任务。
2
Action
首先是beforeRequest和afterRequest。这两个方法是yakit完成自动加解密操作的核心方法。顾名思义,beforeRequest方法在请求发出之前触发;afterRequest方法在请求发出并收到响应之后触发。从这个特性基本也能猜测出来两个方法的用法场景:即在beforeRequest里面实现对请求内容自动加密的操作逻辑,在afterRequest里面完成对响应内容自动解密的操作逻辑,其常规的代码结构如下
beforeRequest = func(https, originReq, req) {
//获取post请求的body里面的值
body = poc.GetHTTPPacketBody(req)
//handle方法是加密函数,调用handle方法对提取的body内容进行加密
encryptedParam = handle(string(body))
//将加密后的内容替换回原本的请求中去
req = poc.ReplaceBody(req,encryptedParam,false)
//返回处理后的请求包内容
return[]byte(req)
}
//逻辑与beforeRequest一样,只不过把代码里的req改成了rsp,handle1为定义的解密函数
afterRequest = func(https, originReq, req, originRsp, rsp) {
body = poc.GetHTTPPacketBody(rsp)
encryptedParam = handle1(string(body))
rsp = poc.ReplaceBody(rsp,encryptedParam,false)
return []byte(rsp)
}
了解了beforeRequest和afterRequest方法之后,下面其实需要了解的就是常用的一些方法处理的库或者函数就好了,例如
// 将字符串转换成json,提取{"encdata":"38dbfb5139b2bf0f69633074a4e4d821"}中的encdata的值
origin = json.loads(origin)["encdata"]
// 将json对象转换成字符串
origin = json.dumps({"t":origin})
// 将类型强制转换成string类型
string(origin)
// yakit自集成的加解密方法库
codec库
// rpc和对请求头处理时常用的方法库
poc库
上面三个其实很好理解,主要是下面两个库,其实涉及的内容比较多,但是也不用库里面的所有方法都能记得很熟练,只需要把常用的方法熟悉即可。
例如poc库的提取post请求的body内容
body = poc.GetHTTPPacketBody(req)
替换原本post请求的body的值为encryptedParam
req = poc.ReplaceHTTPPacketBody(req,encryptedParam)
例如提取请求包body的内容,进行sm4加密,然后替换回去
提取post请求的key参数的内容
body = poc.GetHTTPPacketPostParam(req, "key")
替换原本post请求的key参数的值为encryptedParam
req = poc.ReplaceHTTPPacketPostParam(req, "key", encryptedParam)
例如单纯提取body中的key值,进行加密
提取get请求的key参数的内容
body = poc.GetHTTPPacketQueryParam(req, "key")
替换原本get请求的key参数的值为encryptedParam
req = poc.ReplaceHTTPPacketQueryParam(req, "key", encryptedParam)
例如提取get请求中的key的值,进行加密
替换/增加请求头中的sign参数的值为encryptedParam
req = poc.ReplaceHTTPPacketHeader(req,"sign",encryptedParam)
例如提取body的内容,进行加密计算,然后增加sign请求头
codec库的代码使用就更简单了,直接输入codec.加上所需要的算法类型,即可看到所需要的加解密算法的实现方法
根据需求选择对应的方法,按照指示依次填入key,iv以及明/密文进行实现就好。(鼠标浮动在方法上,即可显示对应方法的注释,可以更好帮助理解该方法的实现)
更多热加载案例学习可以关注主页【加解密逆向速成培训】课程嘞,课程里还提供了实际项目中常用到的加解密方法(包含对称加密,非对称加密,哈希算法等)的yakit热加载代码模版,以及调用rpc代码yakit热加载代码模版等内容哩
3
End
🚀 新圈子上线 | 高质量安全内容持续更新中!
我最近在纷传上建立了一个全新的安全技术圈子,主要聚焦于 WEB安全、APP安全、代码审计、漏洞分享 等核心方向。目前圈子刚刚建立,内容还不算多,但会持续高频更新,只分享真正有价值、有深度的干货文章。
📚 圈子中包含:
-
高质量原创或精选的安全技术文章
-
公众号历史付费内容免费查看(如:小程序RPC、APP抓包解决方案)
-
一些只在圈子内分享的独家思路和实战经验
-
不定期分享0/1day
原文始发于微信公众号(跟着斯叔唠安全):手把手教你快速上手yakit热加载技能
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论