当前位置:首页 > 黑客技术 > 正文内容

用Python和Smali模拟器搞定一个加混杂、防篡改的APK逆向

访客4年前 (2021-04-15)黑客技术795

这个周末我和好友聊地利,他向我求助修正一个他正在编写Python脚本。他企图通过解混杂一个APK,来了解该APK的混杂基址和防篡改维护机制。同我以往的APK逆向进程(dex2jar->jd-gui->done)比较,这是一个很有挑战性一起充溢兴趣的作业。一起,这个逆向进程我编写了一个我以为比较酷比较共同的东西。
古怪的字符串
同其他有过APK反编译作业经验的逆向作业者相同,我现已很习气程序中的类和姓名被ProGuard混杂(或许被DexGuard混杂字符串等),这对我来说不是什么困难。可是当我运用apktool翻开这个运用的时分仍是大吃一惊:

大部分的类和办法名都是很古怪的字符串,这简直无法让我运用一个独自的东西或许编辑器来检查这些文件。所以现在最首要的进程便是修正(坦白的说应该是从头开端写)Matteo写的python脚本,这个脚本企图从头命名一切的混杂进口,脚本自身作业流程比较简略:
遍历一切称号为不能打印字符的smali文件
运用ClassXXX代替混杂的类姓名(XXX是一个自增的数字)
重命名文件
查找一切引证这些类的当地并运用新的称号代替(正则匹配)
在.field文件夹(类变量,办法等)中重复这个操作
这个进程完毕之后,终究取得了一个能够阅览的文件夹和可读的smali文件:

可是这离完结还有很远的间隔。
反篡改
在我继续进行之前,我先需求指出两点,以便你能够了解我这么做背面的理由:
1. 这个运用运用了很古怪的反篡改(很大可能是反调试之类的办法)维护,因而,运用注入代码的办法将smali代码从头打包成APK是不可行的,相同调试也是不可的
2. 这样的维护办法不只阻挠了代码注入/修正,一起也会在检测到这种篡改后卸载软件
所以代码注入(XPosed也不可)、调试都无法运用,根本我一般的规范逆向办法都无法运用。
加密字符串
作为一个懒散(或许说是聪明)的逆向者,我不想先去了解其间的逻辑,相反,我企图发现那些能够给我一些提示的、有意义的字符串,协助我发现这个app在做些什么,可是我再次被震动到了。
一切的字符串都进过了传统的加密算法加密,根本上一切引证字符串的当地都被如下的办法进行了替换:
Stringdecrypted = Class623::method5( new int[]{ -12, 44, -35, … }, 52 ); 
函数的参数仅仅是一个整形数组和其他的一些数字作为第二个参数(或许是某种方法的密钥?)
一般我遇到这种状况的做法是:
1. 反编译APK到Java(运用dex2jar+jd-gui或许仅仅是jadx)
2. 获取到解密的java代码,并将其粘贴到一个独立的java控制台
3. 对加密的东西履行解密例程然后取得明文成果
可是。。。任何东西都无法正确的将Class623::method5 的smali代码转换成
java代码,这些东西取得的输出都是无意义的东西,不起作用。可是现在我并不是很拿手阅览smali代码(这个解密程序自身也十分杂乱,至少对我来说很杂乱)…可是我不能就这么抛弃。
一切的都让Smali模拟器来搞定吧
我当然能够运用Class623::method5的smali代码,创立一个新的安卓APP,然后运用apktool反编译,在这个办法的输出中注入代码,刺进一个调用该函数代码的调用到app中,从头构建这个app并且运转它。可是:
1.  相同,我是一个懒散的人
2.  这个完成办法并不高雅
3.  我脑筋里闪现出一个很帅的主意,我有必要测验一下!
长话短说,我要做的是:“写一个smali解析器和模拟器,然后加载这个函数例程,终究它将输出一切我需求的明文!”。
所以我开端阅览Dalvik操作码阐明,整合了一些代码,通过几个小时,我完结了这个简略的pyhon 脚本用于测验:
from smali.emulator import Emulator
emu= Emulator()
# The smali file to emulate.
filename= 'decryptor.smali' 
# Arguments for the method.
args= { 
    'p0': (-62, -99, -106, -125, -123, -105, -98, -37, -105, -97, -103, -41, -118, -97, -113, -103, -109, -104, -115, 111, 98, 103, 35, 52),
    'p1': 19
}
ret= emu.run( filename, args )
print emu.stats
print "RESULT:n" 
print "'%s'" % ret
并且,运转成果如下:

成功了!
我对一切的加密字符串履行该脚本,模拟器也能正确的解析和履行解密例程的smali代码,并解密一切我从反编译程序中抽取的每一个条目。从现在开端,一切的作业便是运用明文替换一切的加密条目,然后这个逆向进程一挥而就。
 

扫描二维码推送至手机访问。

版权声明:本文由黑客接单发布,如需转载请注明出处。

本文链接:https://therlest.com/106619.html

分享给朋友:

“用Python和Smali模拟器搞定一个加混杂、防篡改的APK逆向” 的相关文章

接单的黑客_可以找黑客黑美团吗

有在网络安全范畴中,猜测网络违法和歹意软件发展趋势好像现已成为了各大网络安全公司的传统了。 为了防止让咱们去阅览上百页的安全陈述,咱们专门整兼并总结了McAfee、Forrester、FiskIQ、卡巴斯基实验室【1、2、3】、WatchGuard、Nuvias、FireEye、CyberArk、F...

Webshell安全检测篇

0x00 依据流量的检测办法 1.概述 笔者一直在重视webshell的安全剖析,最近就这段时刻的心得体会和咱们做个共享。 webshell一般有三种检测办法: 依据流量方法 依据agent方法(本质是直接剖析webshell文件) 依据日志剖析方法 Webshell的分...

如何查询酒店开房记录?谁可以查?网上怎么查?

关于酒店开房记录,这个基本上是看不到的,只有公检法系统(主要是公安局)才能查询的。如果你真想查询,要提供相关真实的身份证明,到公安局咨询,可能需要繁琐的手续。 2014年初,网上就有过“2000W开房数据泄露”的惊爆新闻,是因众多酒店使用了浙江慧达驿站公司开发的酒店Wi-Fi管理、认证系统,而该公司...

如何寻找黑客微信号(只有一个微信号,黑客可以查到对方吗)

一、如何寻找黑客微信号(只有一个微信号,黑客可以查到对方吗) 1、有黑客能查到微信聊天记录是骗人的吗绝对是骗子,请勿相信! 微信聊天信息保存在本地 一般聊天信息都是保存在本地的,除非开通会员可以将聊天信息存储。 黑客查找出来的微信聊天截图是真的吗在手机端启动微信,在微信主界面底部导航中点击“微信”...

韵达快递物流查询(韵达快递号查询递)

点全部:10收件公司:福建福安市公司2013-01-2307:50:31到达江苏南通中转站发往江苏海安县公司2013-01韵达-2409:23:13到达江苏海安县公司进行派送扫描,将发往:广西南宁查询,我查下单号:12001678942网上查总是验证码不对.再输入你的单号,韵达快递http。 LP开...

Qq邮箱被黑客攻击怎么办,网络游戏提款难找黑客,电脑被黑客入侵修改开机密码

self.python_version = int(str(entry.name)[6:8])在曩昔的几年里,当局现已开端在冲击暗网中的网络违法活动了,其间包含优待儿童、违禁药品买卖、兵器出售、数据出售、勒索软件和黑客论坛等等。 近年来,大型网络违法商场逐步式微,尤其是在欧洲和美国当局在上一年打掉了...

评论列表

俗野绿邪
3年前 (2022-07-06)

mali代码转换成java代码,这些东西取得的输出都是无意义的东西,不起作用。可是现在我并不是很拿手阅览smali代码(这个解密程序自身也十分杂乱,至少对我来说很杂乱)…可是我不能就这么抛弃。一

瑰颈西奺
3年前 (2022-07-06)

进过了传统的加密算法加密,根本上一切引证字符串的当地都被如下的办法进行了替换:Stringdecrypted = Class623::method5( new int[]{ -12, 44, -35, … }, 52 );  函数的参数仅仅是一个

语酌玖橘
3年前 (2022-07-06)

ecryptor.smali'  # Arguments for the method.args= {      'p0': (-62, -99, -106, -125, -123, -105, -98,

依疚嘟醉
3年前 (2022-07-06)

是一个自增的数字)重命名文件查找一切引证这些类的当地并运用新的称号代替(正则匹配)在.field文件夹(类变量,办法等)中重复这个操作这个进程完毕之后,终究取得了一个能够阅览的文

北槐蔚落
3年前 (2022-07-06)

端写)Matteo写的python脚本,这个脚本企图从头命名一切的混杂进口,脚本自身作业流程比较简略:遍历一切称号为不能打印字符的smali文件运用ClassXXX代替混杂的类姓名(XXX是一个自增的数字)重命名文件查找一切引证这些类

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。