Android对抗反编译,非科班程序员求职经历分享
以下为使用Apktool反编译出一些的文件
下面开始进入正题(工具类在文章最后)
1.在APP中对名称,包名,图片进行检查
名称–思路:获取App的名称,检查APP名称是否与自己的名称一样,如果不一样,设置点用户不友好操作(崩溃啥的)。
/*
- 获取当前应用的名称
*/
public static String getAppName(Context context) {
//获取 PackageManager
PackageManager pm = context.getPackageManager();
try {
//通过PackageManager这个Api可以拿到应用的一些信息
//packgeName:包名 flag:获取额外信息的标识
PackageInfo packageInfo = pm.getPackageInfo(context.getPackageName(), 0);
int labelRes = packageInfo.applicationInfo.labelRes;
return context.getResources().getString(labelRes);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return null;
}
包名–思路:获取App的包名,检查APP包名是否与自己的包名一样,如果不一样,设置点用户不友好操作(崩溃啥的)。
/*
- 获取当前应用的包名
*/
public static String getPackageName(Context context) {
PackageManager pm = context.getPackageManager();
try {
PackageInfo packageInfo = pm.getPackageInfo(context.getPackageName(), 0);
//拿到版本名称
return packageInfo.packageName;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return null;
}
APP图标–同上,先获取APP的图标,然后对APP的图片进行验证。
博主的做法是:对图片获取五个点的rgb值,输出一个关于RGB的值(误差在0.1-3之间),然后进行值的大小范围判断。
/**
- 获取图标 bitmap
*/
public static Bitmap getAppImageBitmap(Context context) {
PackageManager packageManager = null;
ApplicationInfo applicationInfo = null;
try {
packageManager = context.getApplicationContext()
.getPackageManager();
applicationInfo = packageManager.getApplicationInfo(
context.getPackageName(), 0);
} catch (PackageManager.NameNotFoundException e) {
applicationInfo = null;
}
Drawable d = packageManager.getApplicationIcon(a
pplicationInfo);
if (d == null) {
return null;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && d instanceof AdaptiveIconDrawable) {
Bitmap bitmap = Bitmap.createBitmap(d.getMinimumWidth(), d.getMinimumHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
d.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
d.draw(canvas);
return bitmap;
} else {
return ((BitmapDrawable) d).getBitmap();
}
}
//输出一个关于此bitmap的值
public static float getBitmapColorScale(Bitmap bitmap){
Bitmap src =bitmap;
int R, G, B;
float Rmax=0,Gmax=0,Bmax=0;
float bitmapScale=0.f;
int pixelColor;
int height = src.getHeight()/4;
int width = src.getWidth()/4;
int heightscale[]={1,1,2,3,3};
int widthscale[]={1,3,2,1,3};
for (int i = 0; i <5 ; i++) {
pixelColor = src.getPixel(widthwidthscale[i],heightheightscale[i] );
R = Color.red(pixelColor);
G = Color.green(pixelColor);
B = Color.blue(pixelColor);
Rmax+=R;
Gmax+=G;
Bmax+=B;
}
bitmapScale=(Rmax+Gmax+Bmax)/5;
return bitmapScale;
}
2…想模仿实现某个功能,数据库
思路:对一些核心的数据进行伪装或者加密(秘钥,将一个数据以各种不同的方式存储)
最后:对classes.dex文件进行CRC值的验证(从服务器或者数据库获取CRC值与之进行对比)
//CRC是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数
public void apkIntegralityForCRC(Context context, String orginalCRC) {
// 获取Apk包的存储路径
String apkPath = context.getPackageCodePath();
try {
ZipFile zipFile = new ZipFile(apkPath);
// 读取ZIP包中的classes.dex文件
ZipEntry dexEntry = zipFile.getEntry(“classes.dex”);
// 得到classes.dex文件的CRC值
String dexCRC = String.valueOf(dexEntry.getCrc());
// 将此次得到的CRC值与数据库/服务器数据的CRC值进行比较校验
if (!dexCRC.equals(orginalCRC)) {
Toast.makeText(context,“APP已经被修改”,Toast.LENGTH_SHORT).show();
}
} catch (IOException e) {
e.printStackTrace();
}
}
以上所有操作为增大反编译的难度。
工具类如下:
/*用途
1.获取当前应用的名称:getAppName
2.获取当前应用的版本号:getVersionCode
3.获取当前应用的版本名称:getVersionName
*/
public class PackageUtils {
public PackageUtils() {
}
/*
- 获取当前应用的名称
*/
public static String getAppName(Context context) {
//获取 PackageManager
PackageManager pm = context.getPackageManager();
try {
//通过PackageManager这个Api可以拿到应用的一些信息
//packgeName:包名 flag:获取额外信息的标识
PackageInfo packageInfo = pm.getPackageInfo(context.getPackageName(), 0);
int labelRes = packageInfo.applicationInfo.labelRes;
return context.getResources().getString(labelRes);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return null;
}
/*
- 获取当前应用的版本号
*/
public static int getVersionCode(Context context) {
//获取 PackageManager
ckageName(), 0);
int labelRes = packageInfo.applicationInfo.labelRes;
return context.getResources().getString(labelRes);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return null;
}
/*
- 获取当前应用的版本号
*/
public static int getVersionCode(Context context) {
//获取 PackageManager
Android对抗反编译,非科班程序员求职经历分享相关推荐
- 4年前端、2年CTO:一个非科班程序员的真实奋斗史
1.引言 我,Scott,一家创业公司的 CTO. 从业6年却很少写文章,近一年来接触了几十个刚毕业的前端新人,也面试了100多个前端工程师和Nodejs工程师,对于前端发展的这个职业算是有些感触吧, ...
- 揭开程序员身上的「专业面纱」:非科班程序员,都来自哪些专业?
[文章来源微信公众号:每天学编程] 专业选择重不重要?这几乎成了每年高考后的「全民话题」.有人说「专业决定就业」,有人说「职业无关专业」.对于程序员群体而言,大学专业对他们的职业选择发展又有着怎样的影 ...
- 尤雨溪:全职做开源年薪百万,非科班程序员也能成功
9 月 19 日,VUE 终于迎来了 . 众所周知,VUE 的作者尤雨溪是一个资深的二次元爱好者.自 2014 年以来,VUE 的每个重要版本都会被赋予一个神秘代号.从 VUE 1.0 的 " ...
- 非科班程序员看科班程序员和非科班程序员之间的差别
不知怎么的就想起这个话题,于是写写自己的看法,和大家讨论讨论. 首先定义2大讨论对象: 科班程序员:在从事程序员前是读计算机及相关专业的,如:计算机,数学,软件工程等.他们从事程序员这行主要是因为自己 ...
- 非科班程序员与科班程序员的区别在哪里?
[文章来源微信公众号:每天学编程] 作为一名典型的非科班程序员,我在学习和工作一段时间之后,发现了自己跟科班程序员还是有很多的的区别,不管是思维上还是做事风格,以及对待问题的解决方式,都感觉有些差强人 ...
- 非科班程序员逆袭:一个被称阿里“码神”,另一个颠覆软件生态
专业对口自然可贵,非科班出身程序员一样可逆袭,书写一段传奇,成为佳话. 马云的扫地憎"多隆" 阿里巴巴有一位特殊技术合伙人蔡景现,花名"多隆",相貌平平的他,却 ...
- 如何看待培训机构出来的非科班程序员
看着身边的同学和朋友的情况,有感而发,打算从各方面角度说一说这件事. 近几年,互联网创业潮让IT技术人员的需求大大增加,各类IT培训机构风生水起,办得如火如荼.大多培训机构都是以保底工资nk,年薪轻松 ...
- 答30岁已婚非科班程序员:你的空间一直可以在
[来信] 您好贺老师: 无意之间在CSDN上找问题答案看到了你的这个博文,于是下了班,慢慢的,把你那些给朋友们的回复看了个遍.想想自己也有问题,于是给你发信息.不管有没有回复,不试怎么知道呢?但愿如果 ...
- Eclipse安装反编译插件JD-Eclipse----(程序员何必要为难程序员呀!蓝瘦香菇)
如果你觉得对你有用,请留下一个赞再走,谢谢!! 文章目录 一.看源码引发的吐槽大会 二.支招解决问题 三.成果展示,开心的飞起!! 四.分享交流 一.看源码引发的吐槽大会 想看jar包中的.class ...
- 非科班程序员被裁员后反而涨薪了200%,这两个月他都经历了哪些?
今年年初开始,裁员潮一浪接着一浪翻滚而来,让互联网人胆颤心惊,时刻担心下一波裁员是否就要降临到自己身上. 小帅(化名)是一个原本月薪8k,在小外包公司做政府项目的一名普通员工,前不久就被裁员了: 小帅 ...
最新文章
- 958毕业,苦学Java,竟被二本毕业生吊打!网友:确实厉害!
- 近朱者赤,近墨者还是赤
- Java RESTful Web Service实战
- python读取xlsx文件pandas_python-如何使用iPython中的pandas库读取.xlsx文件?
- 无限复活服务器,绝地求生无限复活模式怎么玩 无限复活新手教程
- Ubuntu网络连接未托管的解决办法
- 数据产品-数据可视化工具Excel
- UMEditor调整文本编辑器的组件位置的方法
- 一坛酸菜让白象卖断货,方便面圈的鸿星尔克要逆袭?
- 每日英语:6 Brainy Habits of the Wisest People
- 2018 开发者生态报告:Java 最流行,Go 最有潜力,JavaScript最常用
- mysql is fashion_Blog/MySQL.md at master · fashionzzZ/Blog · GitHub
- UE4 Linux交叉编译Clang下载
- Python词频统计的3种方法
- 哨兵-1 Sentinel-1数据下载(欧空局)
- 安装在ntfs分区的linux,从硬盘NTFS分区安装mandriva linux
- 通达信V6.1分时数据文件格式分析
- 微信小程序--使用本地服务器进行测试开发
- Cesium学习教程+笔记(Mars3D) 图层 图层组 矢量数据
- 介绍计算机专业说明文,描述电脑说明文600字.doc