1.简介

这个题目是一位吾爱破解的坛友在面试UC的Android逆向工程事时,遇到的题目。此题不难,与阿里移动去年移动安全比赛的题目差不多,题目的验证方式也是查表对比,并且这个表的数据是放在文件中的。

2.题目分析

直接使用JEB对UC-crackme.apk程序进行反编译,得到下面的结果:

获取查询的密码表,即文件abcdefghddddd的文件偏移0x15D81开始到0x16081结束的0x300字节的数据。

获取中间参与最终字符串比较的18字节的数据即文件abcdefghddddd的文件偏移0x16481开始的后面18个字节的数据。

通过用户输入的注册码,查询密码表获取参与比较的密码字符串。

经过前面的分析,写了个注册机,代码如下:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException; /**
*
*/ /**
* @author Fly2014
*
*/
public class Key
{
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException
{
// 创建文件类
File file = new File("abcdefghddddd"); // 构造文件输入流
FileInputStream fileInputStream = new FileInputStream(file); // 获取文件的大小
int nFileSize = fileInputStream.available(); // 申请内存空间
byte[] byteArryFile = new byte[nFileSize]; byte[] byteArryTable = new byte[768]; byte[] byteArryResult = new byte[18]; // 读取文件的数据到内存中
fileInputStream.read(byteArryFile, 0, nFileSize); // 获取密码查询表0x300字节
System.arraycopy(byteArryFile, 0x15D81, byteArryTable, 0, 768); // 获取最终参与比较的18字节的密码
System.arraycopy(byteArryFile, 0x16481, byteArryResult, 0, 18); // 密码查询表转utf-8格式
String strTable = new String(byteArryTable, "utf-8"); // 18字节密码装utf-8格式
String strResult = new String(byteArryResult, "utf-8"); // 存放用户输入的注册码
StringBuilder strBuilderKey = new StringBuilder(); // 包里查询破解
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 255; j++)
{
if (strTable.charAt(j) == strResult.charAt(i))
{
// 获取用户输入的字符
strBuilderKey.append((char) j); break;
}
}
} // 输出key
System.out.println("输入的注册码:" + strBuilderKey.toString() + "\n"); // 参与比较的最终密码
System.out.println("比较的中间密码:" + strResult.toString() + "\n"); System.out.println("显示查询密码表:"); for (int a = 0; a < 255; a++)
{
System.out.print(strTable.charAt(a)); if ((a + 1) % 51 == 0 && a != 0)
{
System.out.print("\n");
}
} }
}

经过分析发现,最终的输入字符串是581026。

分析文档的下载地址:http://download.csdn.net/detail/qq1084283172/9029777

UC-Android逆向工程师 面试题1的分析的更多相关文章

  1. UC-Android逆向工程师面试第2题分析

    博客链接:http://blog.csdn.net/qq1084283172/article/details/52133172 一.简介 这个题目是别人面试UC优视集团Android逆向工程师一职位的 ...

  2. Android逆向工程师的黑科技

    你们发现了吗?Android逆向.安全方面的工程师真的越来越"稀有"了. 以腾讯.美团.百度为代表的大厂们,在某招聘网站上居然薪酬高达30-60k. 现在移动端市场越来越火热,AP ...

  3. Android中高级工程师面试题

    https://www.cnblogs.com/huangjialin/p/8657565.html(存在不少答案错误,可参照知识点复习,答案不可全信)  上 https://www.cnblogs. ...

  4. Mc小冰总结的Android开发工程师面试题以及答案,android程序员必备,详解

    1.请谈一下Android系统的架构. 答:Android系统采用了分层架构,从高层到低层分别是应用程序层.应用程序框架层.系统运行库层和linux核心层. 2.谈谈android大众常用的五种布局. ...

  5. 整理最全的Android开发工程师面试题,面试题详解。java、Android程序员

    1.    请描述下Activity的生命周期. 必调用的三个方法:onCreate()--> onStart() --> onResume(),用AAA表示 (1)父Activity启动 ...

  6. Android开发工程师面试题总结。android开发面试经验

    1:Android中五种数据存储方式分别是什么?他们的特点?     (1)SharedPreference,存放较少的五种类型的数据,只能在同一个包内使用,生成XML的格式存放在设备中 (2) SQ ...

  7. Android开发工程师面试题之handler详解。android程序员,android开发面试资料,详解

    Message:消息:其中包含了消息ID,消息对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理 Handler:处理者:负责Message发送消息及处理.Handler ...

  8. 刷了无数大厂Android研发岗面试题,其实考的无非是这 3 点能力

    前言 发现一个有趣的现象,似乎程序员们对面试题总是抱有热情,多看几道面试题,自己的面试能力就可以提高一点. 作为一个研发工程师,看过很多公司的面试题,也参与过很多公司的面试,发现大厂的面试题更加具有代 ...

  9. [转]Android逆向之动态调试总结

    一.在SO中关键函数上下断点 刚学逆向调试时.大多都满足于在SO中某关键函数上下断点.然后通过操作应用程序,去触发这个断点,然后进行调试 详细的步骤可以参见非虫大大的<Android软件安全与逆 ...

随机推荐

  1. ReactElement源码笔记

    ReactElement 源码笔记 ReactElement通过 createElement创建,调用该方法需要 传入三个参数: type config children type指代这个ReactE ...

  2. Hadoop的常用命令

    注:hadoop的使用命令包含 hadoop fs 开头 or hdfs dfs开头 等多种形式来操作. 这里以hadoo fs的形式来介绍在这些命令 1.列出根目录下所有的目录或文件 hadoop ...

  3. [UNP] IO 复用

    UNP Part-2: Chapter 6. I/O Multiplexing: The select and poll Functions 的读书笔记. 在 这篇博客 的最后,我们对文章中的服务器- ...

  4. 翻译:《实用的Python编程》03_06_Design_discussion

    目录 | 上一节 (3.5 主模块) | 下一节 (4 类) 3.6 设计讨论 本节,我们重新考虑之前所做的设计决策. 文件名与可迭代对象 考虑以下两个返回相同输出的程序. # Provide a f ...

  5. RPC基础以及造一个RPC的轮子需要注意些什么

    RPC基础以及造一个RPC的轮子需要注意些什么 前言 rpc即远程过程调用,是分布式系统常用的通信方法.远程可以是在一台机器上的不同进程或在不同一个机器上的不同进程.rpc更看重速度,像调用本地方法一 ...

  6. Airbnb JavaScript代码规范(完整)

    类型Types 基本数据类型 string number boolean null undefined symbol const foo = 1; let bar = foo; bar = 9; co ...

  7. 使用代码生成工具快速开发ABP框架项目

    在一般系统开发中,我们一般要借助于高度定制化的代码生成工具,用于统一代码风,节省开发时间,提高开发效率.不同的项目,它的项目不同分层的基类定义不同,我们需要在框架基类的基础上扩展我们的业务类代码,尽量 ...

  8. 2018.12-2019.1 TO-DO LIST

    AC自动机 P3808 [模板]AC自动机(简单版)(完成时间:2018.12.06) P3796 [模板]AC自动机(加强版)(完成时间:2018.12.06) P2444 [POI2000]病毒( ...

  9. Bug调试专项训练四笔记

    Ajax案例一 导入项目直接运行出现联想无反应 错误原因: 错误1: 55行找不到方法: 错误1解决方案: 解决错误1点击仍无反应 错误2:通过浏览器得出错误2:58行找不到方法 错误2解决方案: 解 ...

  10. Baolu Aggregate TPS Report

    1.说明 这是一个基于JMeter官方的Aggregate Report的监听器改进而来的监听器!!! 2.插件背景 早在很久之前,宝路就曾经改造过JMeter的Aggregate Report 的源 ...