欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

安卓应用程序的逆向工程

来源:本站整理 作者:佚名 时间:2017-09-20 TAG: 我要投稿
 

咱们可以或许看到Inspeckage曾经胜利地从曾经hook的函数中截取到数据而且供应给咱们了函数的参数和前往值。如今点击 WordStr 按钮而且设置装备摆设如下的选项。
 

在这里咱们将第一个参数通报给了咱们的加密函数,这个函数领有咱们曾经用frida辨认进去的机密值。不管甚么时刻停止输入测试(大小写敏感),Hook都邑调换数据而且通报咱们供应的值,而后将Congratulations再一次表现在咱们的屏幕上。
 

二进制补钉(字节码改动)
在这个办法中,咱们将会应用ApkStudio和Jarsigner。 咱们将会经由过程改动反编译的Apk,以后从新编译它来改动法式的逻辑。启动 ApkStudio而且再次加载文件( 记着要撤消抉择"Decode Resources"复选框),以后在MainActivity$1.smali中定位到法式代码中停止比拟的地位
 

咱们可以或许在第113行看到法式会比拟两个分歧的值来履行检测,假如比拟失败了,会表现"Umm, Try Again"。然则假如法式总是将两个雷同的值停止比拟会怎样呢?在这类情况下,法式将会跳过else前提间接前往true。以是如今让咱们将代码改动后从新编译并对咱们的Apk停止署名,而后做测试。
 

再一次运转应用验证能否法式能否经由过程了原来的法式逻辑。
静态阐发和代码复制
在这个办法中,咱们将会应用Android Studio/IntelliJ 和 ByteCodeViewer来停止静态代码阐发。
Static analysis
Also called static code analysis, is a method of computer program debugging that is done by examining the code without executing the program. The process provides an understanding of the code structure, and can help to ensure that the code adheres to industry standards.
启动 ByteCodeViewer(BCV) 而且期待它来装置依附项。一旦装置好了以后,咱们将可以或许间接在它外面关上apk文件。在BCV中,点击File->Add 而且抉择 CrackMe.apk,而后让它完成加载这个文件。点击View->Pane1->Procyon->java和View->Pane2->Smali/Dex->Samli/Dex 。你的界面将会看起来和下面的异样
 

在第9行,咱们可以或许看到"final String string2 = this.this$0.getString(2131099669);"。在以后运动上下文的getString()办法,可以或许应用"this","MainActivity.this "或许"getApplicationContext() " 经由过程一个整数值来获得资本值。这些数字id的索引在R类中被创立,以是咱们将会在R$string.class 中探求资本id,BCV可以或许将内容辨认为xml 文件格局。
 

咱们可以或许看到这个整数值被分配给a,如今咱们不得纰谬a在strings.xml中做一个查找,你可以或许在BCV中经由过程睁开CrackMe.apk->Decoded Resources->res->values->strings.xml 。
 

有时刻BCV关上文件会呈现出二进制情势而不是xml格局,对付这类情况,咱们可以或许点击File->Save As Zip ,而后解压zip而且在编辑器中关上strings.xml。
 

极好的,咱们曾经找到了这个字符串。咱们将会用这个办法规复一切的字符串而且保留它们。
2131099669 -> a -> vXrMphqS3bWfIGT811/V2Q==
2131099683 -> b -> TXlTdXBlclNlY3JldEwzM3RQYXNzdzByZA==
2131099685 -> d -> Congratulations
2131099686 -> e -> Umm, Try again
咱们将会应用IntelliJ来写咱们的代码来试图完成逆向原始函数的功效,经由过程从BCV反编译后的文件中复制代码。 当一切的代码让在一块的时刻,它将会看起来像下面的代码
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.MessageDigest;
import java.util.Base64;
class Decrypt {
 
    public static void main(String args[]) {

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载