-
-
[原创] 关于多版本跟踪如何通过特征码快速定位函数
-
发表于: 2021-9-11 16:30 5741
-
现如今大厂APP版本更新实在太快,轻则2天重则7天必定更新一个小版本,这叫导致我们刚刚把老版本的算法分析出来,结果人家就更新了,就算只更改一小点地方,如果直接重新定位算法位置也是件非常繁琐的事情!
以上是某APK的一个特别的函数,一个是15版本,一个是16版本 期间跨越了大约16次迭代.但是经过重新定位我们发现 他的逻辑应该是没有改变. 如果我们能拿到老版本的秘钥位置,如果新版本更新了秘钥,我们只需要快速定位这个位置就好.
而大部分厂商也不可能经常性的把一个算法大改,所以寻找特征对于连续跟踪特别有用.
以上脚本就是在IDC里寻找特征码的脚本,有时候可能一条指令无法精确查找,需要各位基于场景小小的修改一下
这里我们就找到了两个匹配的地方,剩下的操作就简单了,再进IDA中精准比对一下
经过对比一模一样,定位成功.下一步分析就OK啦!
技术手段比较简单,而且也是PC遗留下来的手段.但是对于项目需要的话还是很有用的.
from
idaapi
import
*
from
keystone
import
*
ks
=
Ks(KS_ARCH_ARM, KS_MODE_ARM)
#ks = Ks(KS_ARCH_ARM64,KS_MODE_LITTLE_ENDIAN)
print
(
"MagicIllusion Find"
)
def
ks_disasm(dis_str):
global
ks
encoding, count
=
ks.asm(dis_str)
return
encoding
func_start
=
0x10000
func_end
=
func_start
+
0x40000
#print(bytes(ks_disasm("ORR W11, W11, W15,LSR#26")))
for
i
in
range
(func_start, func_end):
if
get_bytes(i,
8
,
0
)
=
=
bytes(ks_disasm(
"AND R7, R1, R5,LSR#11"
)
+
ks_disasm(
"ORR R7, R7, R5,LSR#31"
)):
patch_start
=
i
print
(
hex
(patch_start))
from
idaapi
import
*
from
keystone
import
*
ks
=
Ks(KS_ARCH_ARM, KS_MODE_ARM)
#ks = Ks(KS_ARCH_ARM64,KS_MODE_LITTLE_ENDIAN)
print
(
"MagicIllusion Find"
)
赞赏记录
参与人
雪币
留言
时间
codeoooo
为你点赞~
2023-7-25 20:47
一笑人间万事
为你点赞~
2022-7-30 06:44
王路飞
为你点赞~
2022-4-18 15:10
卧勒个槽
为你点赞~
2022-3-3 09:01
0xEA
为你点赞~
2022-1-5 10:17
*笑容*
为你点赞~
2021-11-24 07:25
loser_joker
为你点赞~
2021-10-13 19:29
赞赏
他的文章
- 去花枝零.三《电商某宝》 9650
- 去花枝零.二《外卖某团》 9076
- 比较有效果的抓包方案 9992
- 脱加密壳.一《社区某书》 8850
- 去花枝零.一《视频某音》 27675
看原图
赞赏
雪币:
留言: