吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7508|回复: 17
收起左侧

[Android 原创] 一个面试APK的简单分析

  [复制链接]
红心J 发表于 2017-7-13 00:11
本帖最后由 红心J 于 2017-7-17 21:31 编辑

之前有看到个帖子
http://www.52pojie.cn/forum.php?mod=viewthread&tid=403032&extra=page%3D2%26filter%3Dtypeid%26typeid%3D236
分析android程序的,我是刚学,抱着学知识的心态按照帖子里的,自己走了一遍。
1、先试试爆破吧。
用改之理打开程序。
搜 密码错误 转成 unicode,到 Java 源码去看看

1

 1

如下图:

1

 1

说实话,好像没啥看懂。
不过可以知道的是: str1 是我们的输入 ,  paramView = str1 ,赋值给 paramView

1

 1


这个比较很关键,告诉我们  str2 = paramView = str1 时就正确了。
所以呢,爆破的话,很简单。

1

 1


补充下Dalvik比较指令:
if-eqz  vAA,若 vAA0 则跳, Java语法为:if(!vAA)
if-nez  vAA,若 vAA 不为0 则跳, Java语法为:if(vAA)
if-ltz    vAA,若 vAA 小于0 则跳, Java语法为:if(vAA<0)
if-gez    vAA,若 vAA 大于等于0 则跳, Java语法为:if(vAA>=0)
if-gtz    vAA,若 vAA 大于0 则跳, Java语法为:if(vAA>0)
if-lez    vAA,若 vAA 小于0 则跳, Java语法为:if(vAA<=0)

   if-nez v5, :cond_1   改成  if-eqz v5, :cond_1

1

 1

1

 1


2.我们来找找正确的 key

根据上面的分析,str2 里面就是存放的正确的key
那么,让这个程序输出 str2  就行。
看看str2 出现在什么地方。

1

 1

就是那个 gagafffafa 这个奇怪的函数里面。

1

 1

我们让程序输出 v3, 复制下输出 登陆成功xxx(登陆失败xxx)这段 Dalvik 代码。

1

 1

改一下,把 v6 改成 v3 ,放到上面那个图的最后。


运行试一下

1

1

这。。肯定不对
是错误的。。。为什么呢。。。在来看代码

1

 1

正确的key在v1里面,那就在输出 登陆错误那句话里,把 v6 改成 v1

1

 1

再运行试试

1

  1

1

 1

很明显,,还是不对的。。

为什么呢??我在来看看 v3 和 v1到底比较的什么东西。改成 v3再试

1

 1

运行,输入 123 看看 会输出什么?

1

 1

这几个字是不是很熟悉。。对,就是我们最开始添加代码的那个位置,也就是gagafffafa这个函数的输出。。。。
很遗憾,,没有试出正确的key
----------------------------------------
最后题目是说爆破,爆破成了,由于能力有限,没有找到正确的key。抱歉~
第一次发帖,做的不好的地方,大家海涵。

免费评分

参与人数 4吾爱币 +12 热心值 +3 收起 理由
无名侠 + 10 总结得不错,继续努力
Vat_ + 1 + 1 我很赞同!
逍遥枷锁 + 1 + 1 谢谢@Thanks!
peter_king + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

hjphy 发表于 2017-7-17 20:44
真对你无语,工欲善其事,必先利其器啊,看看哥反编译后的Java代码,你就都明白了
[Java] 纯文本查看 复制代码
package com.uc.uc_crackme;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;

public class MainActivity extends Activity {
    Button mButton;
    EditText meditText;

    class C00011 implements OnClickListener {
        C00011() {
        }

        public void onClick(View v) {
            String v3 = MainActivity.this.meditText.getText().toString();
            String v5 = MainActivity.this.cccccc();
            String v4 = MainActivity.this.gagagfffafa();
            String v2 = null;
            try {
                v2 = MainActivity.bytesToAliSmsCode(v5, v3.getBytes("utf-8"));
            } catch (UnsupportedEncodingException v1) {
                v1.printStackTrace();
            }
            if (v4 == null || v4.equals("") || !v4.equals(v2)) {
                Toast.makeText(MainActivity.this, "密码错误!登录失败", 0).show();
            } else {
                Toast.makeText(MainActivity.this, "恭喜你!登录成功", 0).show();
            }
        }
    }

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(C0002R.layout.activity_main);
        this.meditText = (EditText) findViewById(C0002R.id.edit);
        this.mButton = (Button) findViewById(C0002R.id.button);
        this.mButton.setOnClickListener(new C00011());
    }

    private static String bytesToAliSmsCode(String table, byte[] data) {
        StringBuilder v1 = new StringBuilder();
        for (byte b : data) {
            v1.append(table.charAt(b & 255));
        }
        return v1.toString();
    }

    protected String cccccc() {
        String v6 = null;
        InputStream v3 = null;
        String v5 = "";
        try {
            v3 = getResources().getAssets().open("abcdefghddddd");
            int v4 = v3.available();
            byte[] v0 = new byte[v4];
            v3.read(v0, 0, v4);
            byte[] v1 = new byte[768];
            System.arraycopy(v0, 89473, v1, 0, 768);
            v6 = new String(v1, "utf-8");
        } catch (Throwable e) {
            e.printStackTrace();
        }
        try {
            v3.close();
            return v6;
        } catch (IOException e2) {
            return v6;
        }
    }

    protected String gagagfffafa() {
        String v6 = null;
        InputStream v3 = null;
        String v5 = "";
        try {
            v3 = getResources().getAssets().open("abcdefghddddd");
            int v4 = v3.available();
            byte[] v0 = new byte[v4];
            v3.read(v0, 0, v4);
            byte[] v1 = new byte[18];
            System.arraycopy(v0, 91265, v1, 0, 18);
            String v62 = new String(v1, "utf-8");
            if (v3 == null) {
                v6 = v62;
                return v62;
            }
            v6 = v62;
            try {
                v3.close();
                v5 = v6;
            } catch (IOException e) {
                v5 = v6;
            }
            return v5;
        } catch (Throwable e2) {
            e2.printStackTrace();
        }
    }
}


简单分析一下,就是从ASSERT下的一个文件里面读出一个Table和一个结果值,然后根据输入的内容,从Table里面取出内容,跟这个结果值进行比较,最后的结果是:581026,什么注册机,完全扯淡啊

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
startys + 1 + 1 默默问下你这是用的什么工具.反编译出这种java代码效果的

查看全部评分

 楼主| 红心J 发表于 2017-7-17 21:15
本帖最后由 红心J 于 2017-7-17 21:33 编辑
hjphy 发表于 2017-7-17 20:44
真对你无语,工欲善其事,必先利其器啊,看看哥反编译后的Java代码,你就都明白了[mw_shl_code=java,true]p ...

对不起,朋友,分析错了。抱歉,,我刚学请见谅。我是参照上面那个帖子去做的。没有自己去好好看反编译后的Java代码。是我自己的错,把题目要求也给看错了。抱歉!
peterq521 发表于 2017-7-13 09:33
 楼主| 红心J 发表于 2017-7-13 11:37
peterq521 发表于 2017-7-13 09:33
沙发 楼主一个成品也没给啊

你到我上面给那个链接去看看嘛,那个帖子给了的。
Vat_ 发表于 2017-7-13 12:44
感谢分享
wanmei195634 发表于 2017-7-13 20:06
楼主 加油  分析的不错
Nino30888 发表于 2017-7-13 21:09
感谢分享!!!
wangxd 发表于 2017-7-14 00:14

楼主 加油  分析的不错
NoZuoNo代 发表于 2017-7-14 01:33
分析给力啊,等大神批示
生如上善若水 发表于 2017-7-14 09:20
学习一下,谢谢分享
u7c 发表于 2017-7-14 09:22
不错,学习啦,谢谢分享~~~~~~~~~~~~~~~~~~~
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 01:13

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表