《教我兄弟学Android逆向02 - 破解第一个Android程序》

运行

image.png

目的

成功登录

AndroidKiller

字符串搜索

注意中文输入后需要转为UniCode后再搜索:
image.png
搜索结果为“登录成功”和“登录失败”:
image.png

JavaDecompiler

查看源码,在Java代码中找到关键函数和逻辑,可以使用Ctrl+F查找字符串:
image.png

  1. package hfdcxy.com.myapplication;
  2. import android.os.Bundle;
  3. import android.support.v7.app.AppCompatActivity;
  4. import android.view.View;
  5. import android.view.View.OnClickListener;
  6. import android.widget.Button;
  7. import android.widget.EditText;
  8. import android.widget.Toast;
  9. public class MainActivity
  10. extends AppCompatActivity
  11. {
  12. EditText Name;
  13. EditText Pass;
  14. public void check(String paramString1, String paramString2)
  15. {
  16. if ((paramString1.equals("hfdcxy")) && (paramString2.equals("1234")))
  17. {
  18. Toast.makeText(this, "登录成功", 0).show();
  19. }
  20. for (;;)
  21. {
  22. return;
  23. Toast.makeText(this, "登录失败", 0).show();
  24. }
  25. }
  26. protected void onCreate(Bundle paramBundle)
  27. {
  28. super.onCreate(paramBundle);
  29. setContentView(2130968603);
  30. this.Name = ((EditText)findViewById(2131427419));
  31. this.Pass = ((EditText)findViewById(2131427417));
  32. ((Button)findViewById(2131427418)).setOnClickListener(new View.OnClickListener()
  33. {
  34. public void onClick(View paramAnonymousView)
  35. {
  36. MainActivity.this.check(MainActivity.this.Name.getText().toString().trim(), MainActivity.this.Pass.getText().toString().trim());
  37. }
  38. });
  39. }
  40. }

代码逻辑

有3种方式可以让APP最后提示为“登录成功”:
1️⃣通过逆向得到正确的逻辑:适用于能找到正确逻辑,能操控正确逻辑的情况。比如判断返回值是服务器返回,则不建议
2️⃣修改跳转:将错误的流程,改为正确的流程。即错误后执行正确逻辑的代码,在本例中采用的是,将“等于”改为“不等于”,smali代码为“if-nez”“if-eqz”。
3️⃣修改正确逻辑的值:将判断的值,(即用户名和密码)重新自己定义。

1️⃣通过逆向得到正确的逻辑

通过smali代码查看正确的值

获取正确的用户名和密码,本例中已明文显示:
image.png

  1. if ((paramString1.equals("hfdcxy")) && (paramString2.equals("1234")))
  2. {
  3. Toast.makeText(this, "登录成功", 0).show();
  4. }

用户名:hfdcxy
密码:1234

运行结果

image.png

2️⃣修改跳转

smali代码的跳转指令

image.png
不等于改为等于。注意判断条件是并联(&&),有次字符串对比,smali有行“if-eqz”:

  1. #如果v0等于0则跳转到:cond_0
  2. if-eqz v0, :cond_0
  3. #if-eqz改为if-nez
  4. if-nez v0, :cond_0

运行结果

image.png

3️⃣修改正确逻辑的值

修改smali代码

修改的值为:
image.png

运行结果

image.png

回编译

保存修改

image.png

编译

image.png