首页 > 编程知识 正文

java爱心代码表白(android java花指令_[原创])

时间:2023-05-05 12:58:00 阅读:123568 作者:1558

0x00简介

合伙人给我发了安卓的问题。 与花命令相关,记录移除花命令和算法恢复的过程。

样品

强网杯flower.apk

0x01花指令

插花指令是隐藏不想进行逆向工程的代码块(或其他功能)的一种方法,它在将垃圾代码插入实际代码中的同时,确保原始程序正确运行。 但是,程序没有很好地反编译,程序的内容难以理解,有混乱视听的效果。

主要目的:提高静态分析难度

1、无法执行的花指令

执行是不执行的汇编指令,影响反汇编,影响静态分析(例如ida不能f5 )

2、可行花指令

可执行的花指令一般是无意义的汇编指令,由反汇编正常识别

参考:

3358 dyf.ink/reverse/windows/anti-debug/junk-code /

33559 www.anquan ke.com/post/id/208682

0x02算法恢复

1、样品分析

(1) java层

)2)朴素层sub_F34

sub_F8E

sub_FD0

遇到JUMPOUT时进行path修复

JUMPOUT修复参考: https://BBS.pediy.com/thread-259062.htm

修复sub_F8E

根据ida的指示,sub_F8E应该跳跃的位置是0xFA4=0xF98 0xC

路径脚本

在path之后重建函数(不可思议的p键) ) )。

修复前

修复后

可以通过以上方式对sub_FD0进行函数重建,并且可以在成功识别ida之后使用F5。

2、祛花指令

在动态调试中,可以找到无法执行的花命令

通过分析,可以识别可执行的花的命令

用替换以上内容

在去送花指令之前

摘花指令后(函数重建后ida识别成功) )

去花指令之前伪代码

去花的命令后伪代码

3、算法恢复

)1)动态调试

基于伪代码结合动态调试进行算法恢复

这里需要动态调试来获取值

调试时断点参照loc_11B0 loc_10AA

)2)加密算法

加密过程

1、输入字符串

2、以开头字符填充长度为首的字符10进制长字符串长末尾字符填充=128长

3、循环128位字符首先与data1和data2进行异或,循环28x16(1-76-0 )次进行高/低4位保留(与0xf00xf运算),最后进行异或0x88

4、结果与data3进行比较

)3)算法恢复

加密

解密

执行结果:

0x03总结

1、识别花的指令

2、修复Jumpout

3、动态调试

4、算法恢复

最后2020-9-19 11:56

被聂鲁武编辑

、理由:

上传的附件:

libnative.so

(17.58kb,26次下载)

libnative.so.idb

(322.23kb,下载18次)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。