设为首页 加入收藏

TOP

Android App反编译全程笔记
2014-11-23 22:15:43 】 浏览:5211
Tags:Android App 编译 全程 笔记

在这里讲述的其实是java反编译,主要是因为我是反编译人家的app源码入手的,就自然的挂起了羊头。


以下是反编译出的结果,我们简单的以一个方法为例:


public double getCORRLN(double[] paramArrayOfDouble)
{
double d1 = 0.0D;
double d2 = 0.0D;
double d3 = 0.0D;
double d4 = 0.0D;
double[] arrayOfDouble1 = new double[this.grayLevel];
double[] arrayOfDouble2 = new double[this.grayLevel];
int i = 0;
int k;
label42: int m;
if (i >= this.grayLevel)
{
k = 0;
if (k < 32)
break label171;
m = 0;
if (m < 32)
break label201;
}
for (int i1 = 0; ; i1++)
{
if (i1 >= 32)
{
if ((d3 != 0.0D) && (d4 != 0.0D))
this.CORRLN = ((this.CORRLN - d1 * d2) / Math.sqrt(d3 * d4));
return this.CORRLN;
for (int j = 0; ; j++)
{
if (j >= this.grayLevel)
{
d1 += (i + 1) * arrayOfDouble1[i];
i++;
break;
}
arrayOfDouble1[i] += paramArrayOfDouble[(j + i * this.grayLevel)];
}
label171: d3 += Math.pow(k + 1 - d1, 2.0D) * arrayOfDouble1[k];
k++;
break label42;
label201: for (int n = 0; ; n++)
{
if (n >= 32)
{
d2 += (m + 1) * arrayOfDouble2[m];
m++;
break;
}
arrayOfDouble2[m] += paramArrayOfDouble[(m + n * this.grayLevel)];
}
}
d4 += Math.pow(i1 + 1 - d2, 2.0D) * arrayOfDouble2[i1];
}
}


是不是感觉狗屁不通?这还是例举的一个相对简单的方法,看看这个



基本每个方法都有错误,基本每个错误都是逻辑混乱,基本没一个方法能用,简单来说,这个文件就是废的。


第一次看到这情况,心里很纳闷,不知道是dex2jar这个过程除了问题还是jd的问题,后来百度了一下(谷歌打不开,懒得折腾,别鄙视,人家度娘一样很敬业),发现这种问题很多,通过jad为核心的反编译工具(jd就是如此)都这副尿性,偏偏jad在java反编译工具中又算最好的,不知道是不是因为太久没更新的缘故,反正就是不给力。


那如何是好呢,嘿 用java开发,就没有不能破解的,工具不给力,那就人工来呗,果断搞起。


首先,找出该类的.class文件,javap隆重登场,在这里 比如该类为xohome.class, 在终端中,切入该文件所在目录,执行命令:


javap -c -private xohome.class


简单扫盲:javap是jdk自带的反编译工具,能简单解析class字节码文件的内容,参数 -c为显示字节码 -private为反编译级别,可开发过程中可见级别一样,一下是上头例举方法的字节码:



相信学过汇编的对这些都不陌生,如果你看得头晕,那就没辙了,因为这只是窗口大小的代码,一个中等方法大概有这样的代码500行。。。


我们开好工作窗口,将jd反编译的代码、字节码、空白文档(用作写反编译的代码用)依次列开:



这就是简单的工作台了


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇AngularJS 提交表单的方式 下一篇PHP中的$this和$that指针使用案例

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目