【移动应用安全】工具使用

这篇具有很好参考价值的文章主要介绍了【移动应用安全】工具使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

dex2jar

工具介绍

使用方法

将dex文件变成jar文件

将dex2jar安装包解压,在目录dex2jar-2.0文件夹下找到d2j-dex2jar.bat,要运行的就是这个程序
图方便的话就把这个目录加入环境变量,否则每次使用都要把dex文件放在这里很麻烦
【移动应用安全】工具使用
关于加入环境变量方法可以点击此链接的文章查看相关教程
在需要反编译的dex文件目录下打开cmd
输入命令 d2j-dex2jar.bat classes.dex
【移动应用安全】工具使用
看到目录中多了classes-dex2jar.jar文件
【移动应用安全】工具使用
要打开它,使用jd-gui工具

报错处理

com.googlecode.d2j.DexException: not support version.

【移动应用安全】工具使用

这是因为dex2jar-2.0工具只支持035和036版本协议1
解决方法:
修改dex文件中的版本信息
比如这里我用NotePad++打开dex文件
果然这里的版本号是038,所以把038改成035或036即可
【移动应用安全】工具使用
再次尝试运行dex2jar,可以运行成功了
【移动应用安全】工具使用

jd-gui

下载地址

工具介绍

将classes-dex.jar 文件转换为java文件打开
详见下载地址的官方介绍

使用方法

windows系统

下载zip文件后解压,双击运行exe文件,把需要反编译的文件拖进去即可
【移动应用安全】工具使用
【移动应用安全】工具使用
可以看到这里release版本的反编译结果,变量名和类名被替换成了简单字母
【移动应用安全】工具使用
再看看debug版本的
【移动应用安全】工具使用

APKTool

下载地址

工具介绍

对apk文件静态分析。使用APKTool工具反编译APK生成Smali文件,然后对程序进行分析。将apk文件利用APKTool反编译,生成smali格式的反汇
编代码,然后阅读Smali文件的代码来理解程序的运行机制,找到程序的突破口进行修改,最后使用APKTool重新编译生成apk文件并签名,最后运行测试,如此循环,直至程序被成功破译。2

使用方法

解压APKTool并将其添加到系统变量中(添加方法)
在任意目录下cmd命令行中输入apktool测试是否添加成功
【移动应用安全】工具使用

反编译apk命令
Apktool d[ecode] [OPTS] <file.apk> [< dir>]
编译apk命令
Apktool b[uild] [OPTS] <app_path> [<out_file>]

反编译apk文件

现在用apktool反编译crackme0701.apk
【移动应用安全】工具使用
在要反编译的文件目录下打开cmd
输入命令Apktool d crackme0701.apk 3
【移动应用安全】工具使用
看到在默认目录4下生成了反编译结果的目录
【移动应用安全】工具使用
前面说过的smali文件就在对应的文件夹中,去分析smali格式的反汇编代码
【移动应用安全】工具使用
smali格式文件在目录.\smali\com\droider\crackme0201
【移动应用安全】工具使用

jdk自带的签名工具

keytool

密钥库口令输了android,其他部分用于生成密钥对和自签名证书,大概是填什么都可以。
【移动应用安全】工具使用

报错处理
‘keytool‘ 不是内部或外部命令,也不是可运行的程序

【移动应用安全】工具使用
找到jdk安装位置下keytool的位置,在jdk的bin目录下
比如我的是D:\Java\jdk-18\bin
【移动应用安全】工具使用
然后把它加入环境变量()
重新打开cmd窗口输入命令就可以正常运行了
【移动应用安全】工具使用

jarsigner&apksigner

还是在刚才的目录下D:\Java\jdk-18\bin
把jarsigner加入环境变量(刚才加过了就不用加了)
把生成的.keystore文件放在dist目录下
【移动应用安全】工具使用
输入命令apksigner sign --ks crackme0701.keystore --ks-key-alias crack crackme0701.apk
【移动应用安全】工具使用
这个报错解决了,在报错处理部分有详细说明
包括报错-Djava.ext.dirs=D:\AndroidStudio\SDK\build-tools\26.0.2\lib is not supported. Use -classpath instead.也有相应的解决方法
报错解决完后输入命令,正常执行(password就输之前生成keystore文件时输的android)
【移动应用安全】工具使用
这里其实还报了个错
【移动应用安全】工具使用
发现是把文件名写错了,就没单独列出

然后输入命令签名jarsigner -verify crackme0701.apk
【移动应用安全】工具使用

报错处理
apksigner

‘apksigner’ 不是内部或外部命令,也不是可运行的程序
或批处理文件。
【移动应用安全】工具使用

把apksigner.bat添加到环境变量,apksigner在SDK目录下
在我这的目录是
D:\AndroidStudio\SDK\build-tools\26.0.2
【移动应用安全】工具使用
重新打开cmd窗口再次输入命令,可以执行
【移动应用安全】工具使用

重签名时,用jarsigner签名显示没有清单,jar未签名

【移动应用安全】工具使用
【移动应用安全】工具使用

看到这个报错,那现在咱们就去define the JAVA_HOME environment variable in Control Panel / System / Avanced System Settings to point to the JDK folder
这里是要添加JAVA_HOME到系统变量(看了一下我的系统目录确实是没有JAVA_HOME)
找到jdk的安装目录,我这里是D:\Java\jdk-18
在系统变量里新建一个JAVA_HOME,把jdk的安装目录添加进去
【移动应用安全】工具使用
依次点确定返回,JAVA_HOME加入系统变量
【移动应用安全】工具使用
再去设置Path环境变量,把%JAVA_HOME%\bin加入环境变量,并移到最上面
【移动应用安全】工具使用
然后发现还是不行
又参考了这篇文章发现是find_java.bat的原因,所以又从文章里提供的地址下载了find_java替换原来的文件
我的find_java.bat在目录D:\AndroidStudio\SDK\tools\lib,即安装了sdk的目录下tools\lib
【移动应用安全】工具使用
再在任意目录下输入命令apksigner,没有那个报错了5

-Djava.ext.dirs=D:\AndroidStudio\SDK\build-tools\26.0.2\lib is not supported. Use -classpath instead.

【移动应用安全】工具使用
意思是批处理文件apksigner.bat里面的-Djava.ext.dirs不支持了,换成-classpath
在sdk下面搜apksigner又好几个,就按报错修改了26.0.2的apksigner
我的apksigner在D:\AndroidStudio\SDK\build-tools\26.0.2
这里参考了这篇大佬文章,我也先是按提示(REM注释掉上面那行)改成classpath,发现我的jdk也不认识-classpath。按照文章说的改成–class-path,像下面这样
【移动应用安全】工具使用
再输入apksigner命令,可以显示apksigner相关信息
【移动应用安全】工具使用

由于该 jar 是使用目前已禁用的弱算法签名的, 因此该 jar 将被视为未签名。

既然说是算法的问题,不妨看看keytool的使用规则
这里找到一篇详细解释
(目前并没有解决,但是不影响这个实验程序)
【移动应用安全】工具使用

ideasmali插件

AndroidStudio的一个插件,用于动态调试

安装

参考了这篇
下载ideasmali.zip
打开AndroidStudio,在顶部选择File->Settings->Plugins,齿轮图标那里选install plugins from Disk,安装下载的ideasmali插件
【移动应用安全】工具使用
点击ok添加完成,再重启IDE
【移动应用安全】工具使用
重启后再打开File->Settings->Editor->File Types

【移动应用安全】工具使用
在图示位置加上*.smali
【移动应用安全】工具使用
【移动应用安全】工具使用
这一步是因为新版本的Android Studio默认解析smali文件的插件是Smali Support,这个插件不支持断点,所以我们需要自己手动下载支持断点的smali解析插件ideasmali

使用方法&AliCrackme_1 wp

这里以AliCrackme_1.apk为例
【移动应用安全】工具使用
先用apktool反编译.apk文件
【移动应用安全】工具使用
用IDE打开生成的文件夹File->new->import project,选择默认生成的同名项目
【移动应用安全】工具使用
设置远程监听参考了这篇
Run->Edit Configurations,点+号,选remote
【移动应用安全】工具使用
设置端口为8700
【移动应用安全】工具使用
在onCreate函数处下断点
【移动应用安全】工具使用
配置JDK
File->Project Structure
【移动应用安全】工具使用
打开ddms
在启动ddms之前要先启动模拟器
新版Android Studio已经去掉了ddms的界面。

在DOS命令下打开DDMS方法:
cd C:\Users\lenovo\AppData\Local\Android\sdk //sdk的安装目录,我的目录在D盘下
cd tools
ddms.bat

下载该程序到虚拟机并运行
【移动应用安全】工具使用

打好断点后开始调试,点击

【移动应用安全】工具使用

配置远程调试,修改端口为8601
【移动应用安全】工具使用
adb调试状态启动程序
命令adb shell am start -D –n packagename/android:name
其中packagenameh和android:name在AndroidManifest.xml文件中
【移动应用安全】工具使用
所以命令是adb shell am start -D -n com.example.simpleencryption/.MainActivity
【移动应用安全】工具使用
【移动应用安全】工具使用

再去androidstudio里点调试
【移动应用安全】工具使用

【移动应用安全】工具使用
点完调试会变成这样
【移动应用安全】工具使用
不用管,按f8继续调试
虚拟机显示界面后,在里面任意输入字符,点登录
【移动应用安全】工具使用

到MyActivite$1断点onClick处停下
添加要追踪的变量(右键,add to watches
【移动应用安全】工具使用
(然后我手滑给关了现在端口变8628了
问题不大,再搞一遍就行
【移动应用安全】工具使用
这里enpassword看起来是输入ddddffff的变量password加密后的值
输入1234看看能不能与字母表对应(发现并没有对应,不过对上了一点,可能是数字
【移动应用安全】工具使用
那就看一下字母表有多少字,发现是256个
【移动应用安全】工具使用
好像256没什么用啊,不过ASCII码表也是256个来着,1的ASCII值是50,这里不妨去第50个那看一下对应字母表的什么
【移动应用安全】工具使用
果然是对应上了,这里的加密算法就是将输入的字符转为ASCII码再用字母表对应加密,要解密只需要写出解密程序输入变量pw对应的值即可得到正确密码
不过这样还有些瞎蒙乱猜的成分,可以去源码中找找加密程序

现在对这个程序动态调试找加密程序
【移动应用安全】工具使用

到这里还没有被加密,再按F8往下走走
【移动应用安全】工具使用
到这里被加密了,出现了变量enPassword
那加密函数就是在这一段里被调用了
再按F9回去,前面的过程先步过,到出现enPassword=""时按F7步进
可以看到此时已经进行了部分加密,栈的状态是

bytesToAliSmsCode:145, MainActivity (com.example.simpleencryption)
access$0:143, MainActivity (com.example.simpleencryption)
onClick:48, MainActivity$1 (com.example.simpleencryption)
performClick:7448, View (android.view)
performClickInternal:7425, View (android.view)
access 3600 : 810 , V i e w ( a n d r o i d . v i e w ) r u n : 28305 , V i e w 3600:810, View (android.view) run:28305, View 3600:810,View(android.view)run:28305,ViewPerformClick (android.view)
handleCallback:938, Handler (android.os)
dispatchMessage:99, Handler (android.os)
loop:223, Looper (android.os)
main:7656, ActivityThread (android.app)
invoke:-1, Method (java.lang.reflect)
run:592, RuntimeInit$MethodAndArgsCaller (com.android.internal.os)
main:947, ZygoteInit (com.android.internal.os)

发现加密函数是bytesToAliSmsCode:145, MainActivity(com.example.simpleencryption)
(就是当前栈顶的函数,正在执行的函数)
【移动应用安全】工具使用
现在去找到这个函数
【移动应用安全】工具使用
现在分析一下这个函数6

.method private static bytesToAliSmsCode(Ljava/lang/String;[B)Ljava/lang/String;
    .locals 3
    .param p0, "table"    # Ljava/lang/String;
    .param p1, "data"    # [B

    .prologue
    .line 144
    new-instance v1, Ljava/lang/StringBuilder;

    invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V

    .line 145
    .local v1, "sb":Ljava/lang/StringBuilder;
    const/4 v0, 0x0

    .local v0, "i":I
    :goto_0
    array-length v2, p1

    if-lt v0, v2, :cond_0

    .line 148
    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v2

    return-object v2

    .line 146
    :cond_0
    aget-byte v2, p1, v0

    and-int/lit16 v2, v2, 0xff #关键指令,将输入的char转换为int

    invoke-virtual {p0, v2}, Ljava/lang/String;->charAt(I)C #在字母表里查找

    move-result v2

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;

    .line 145
    add-int/lit8 v0, v0, 0x1

    goto :goto_0
.end method

现在写一个解密函数对应解密就可以了
这里就用python了,简单一点
【移动应用安全】工具使用
解密得581026


  1. 参考自https://www.jianshu.com/p/1c54c1ccf5cc ↩︎

  2. 这段话后面的部分来源吉林大学移动应用安全课件7.2节 ↩︎

  3. 不指定目录,反编译的结果输出到默认目录下 ↩︎

  4. apktool反编译结果的默认存放目录 ↩︎

  5. 因为这个文章在写的时候忘记保存,又重写了一遍,这里就不放图片了。因为还有别的问题,要完全复现还有点麻烦 ↩︎

  6. 参考自http://www.manongjc.com/detail/28-aabttzwsnqatppg.html ↩︎文章来源地址https://www.toymoban.com/news/detail-452242.html

到了这里,关于【移动应用安全】工具使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何使用代码混淆技术保护移动应用程序安全

    在移动应用开发过程中,代码保护一直是一个重要的议题。为了保护应用程序免受黑客攻击和逆向工程师的破解,开发人员使用各种方法来加强应用程序的安全性。其中,代码混淆是一种常用的技术,可以通过对代码进行混淆、压缩和重命名等操作,使得应用程序的代码难以

    2024年01月17日
    浏览(70)
  • 移动应用安全策略不足:未对通过移动应用访问网络的安全进行适当管理

    随着移动互联网的快速发展,越来越多的企业和个人选择通过移动应用来访问网络资源。然而,移动应用安全策略的不足,往往导致数据泄露、恶意攻击等问题。本文将针对这一问题进行分析并提出相应的解决方案。 1. 数据泄露 由于移动设备缺乏与PC机一样的物理隔离机制,

    2024年02月01日
    浏览(51)
  • APP加固:助力移动应用安全合规

    近日,工业和信息化部发布了2023年第2批侵害用户权益行为的App(SDK)名单,55款App因涉及强制、频繁、过度索取权限等问题而被通报。这一举措进一步凸显了合规对于APP发展的重要性。 根据工业和信息化部的通报,被通报的这些App存在着一些消费者难以察觉的问题,如频繁

    2024年02月16日
    浏览(54)
  • 构建安全移动应用:开发者必备的安全措施清单

    移动应用程序的安全性不应该只是一个组成部分或优势,而是最基本的要求。一次安全事件可能会让企业蒙受重大损失,并引发信任危机。因此,从开始编写第一行代码起,安全问题就应该是一个必要条件。 互联网时代,随着移动应用程序的广泛使用,我们与智能手机和移动

    2024年02月19日
    浏览(52)
  • OWASP移动应用安全测试指南中文版

    OWASP移动应用安全测试指南(MASTG)是OWASP移动应用安全(MAS)旗舰项目的一部分,是一本涵盖移动应用安全分析过程、技术和工具的综合手册,也是一套详尽的测试案例,用于验证OWASP移动应用安全验证标准(MASVS)中列出的要求,为完整和一致的安全测试提供一个基线。 O

    2024年02月07日
    浏览(42)
  • nmap在移动设备安全中的应用

    预计更新 第一章 nmap漏洞扫描 nmap漏洞扫描的基本原理和技术 nmap漏洞扫描的常用选项和参数 nmap漏洞扫描的实战案例 第二章 nmap网络探测和映射 nmap网络探测和映射的基本原理和技术 nmap网络探测和映射的常用选项和参数 nmap网络探测和映射的实战案例 第三章 nmap安全审计 nm

    2024年02月12日
    浏览(41)
  • 智能终端安全:应用安全技术—移动互联网信息安全解决方案(上)

    移动互联网智能终端信息安全是一个整体的系统性课题,从技术角度来看,涉及到 终端硬件架构、内核和终端操作系统、应用等各个层面 。 同时,信息安全又是和用户自身需求紧密相关的需求驱动型课题,从用户角度来看,公众用户可能更关心通信安全和费用、反病毒和防

    2024年02月03日
    浏览(53)
  • 智能终端安全:应用安全技术—移动互联网信息安全解决方案(下)

    手机作为一个随身可移动的信息承载终端,面临着各种不同使用场景,灵活的可配置的信息安全策略和稳妥可靠的管理非常必要, 需要提供必要的云端安全管控能力。 此处提到的云端安全管控平台, 包括运营商针对移动互联网需求的网络安全设计和运营商安全能力开放、可

    2024年02月05日
    浏览(65)
  • 移动App安全检测的重要性,好用的App安全测试工具分享

    一、移动App安全检测的重要性 在移动互联网时代,移动App成为人们生活不可或缺的一部分,人们使用App处理各种个人和敏感信息,因此保护用户的隐私和数据安全至关重要。而移动App安全检测是保障用户隐私和数据安全的重要环节。通过安全检测,可以发现和修复应用程序中

    2024年02月16日
    浏览(57)
  • 移动应用数据安全性:如何防止应用程序被黑客攻击和数据泄露?

    在移动应用成为人们生活中不可或缺的一部分的今天,数据安全性已经成为一个非常重要的问题。随着黑客攻击和数据泄露事件的频繁发生,用户对于移动应用程序的信任度也在逐渐下降。本文将探讨移动应用数据安全性的重要性,并提供一些有效的技术措施来防止应用程序

    2024年02月08日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包