为什么要加固APP?
答:因为黑客通过反编译APK得到源码后,会在应用中插入代码,获取利益,比如添加广告,盗取用户账号、密码,后台定制活动等。
 
反编译的方法?
反编译是指apk文件通过反编译工具(例如ApkTool,BakSmali,dex2jar等)对其进行反编译,
 
反编译后会失去原版APP的什么属性?
在反编译时会失去原本的程序签名
在反编译后,如果修改代码,会破坏代码的完整性。
 
 
一、破解者如何盗取移动支付用户账号密码--防劫持和校验技术
1.界面劫持:在登陆界面上布置一层透明的UI界面,当用户输入密码时是输入在透明UI界面上,获取用户账户密码。
  反劫持技术:APP自身进行检测自己的Activity是否是在栈顶,通过弹窗提示用户。
2.校验:完整性校验、签名校验。防止二次打包。防止打包党通过反编译后在apk内添加广告。
    2.1完整性校验:运行时计算md5、sha1等。
    2.2签名校验:判断应用签名,是否为正版签名,否则提示或退出。
    由于Java层代码容易被反编译,所以我们要把校验技术放在native层(系统运行库层)
二、破解者如何盗取移动支付用户账号密码--自定义键盘
    Android软键盘采用了一套统一的通信机制,通过重载BaseInputConnection类方法,可以拦截到输入字符,EditText类也有类似的监听拦截方法。
1、自定义键盘一般采用标准的数字键和qwerty键盘布局。
2、更优秀的做法,采用乱序,大大提高了安全等级。
 
 
关于第三方的加固方案
安卓dalvik虚拟机要求dex文件在内存中以明文形式存在,那么任何加壳方法,到头来到了内存还是明文存在,各种dump方法终究是可以获得它的.那么APP究竟应该如何加固才能防止APP被篡改?
 
app被篡改是防止不了的,只要有人肯逆向。目前最正统的做法就是加壳,不要小看加壳,dump出dex对于大多数人来说依然是一件非常困难的事,如果脱不掉就别谈篡改了。壳被脱掉后也是有办法阻碍篡改的,关键就在于反二次打包,可以通过在原生层验证签名来实现。另外有一种办法,处理编译后的二进制AndroidManifest.xml文件,添加无效的参数,使反编译得到错误的清单文件,篡改者用这个错误的清单文件回编译会使app在一个错误的上下文中运行,可检测到。

1、梆梆

2、通付盾

3、360加固保

4、爱加密

5、腾讯

6、娜迦

app加固的更多相关文章

  1. #云栖大会# 移动安全专场——APP加固新方向(演讲速记)

    主持人导语: 近些年来,移动APP数量呈现爆炸式的增长,黑产也从原来的PC端转移到了移动端,伴随而来的逆向攻击手段也越来越高明.在解决加固产品容易被脱壳的方案中,代码混淆技术是对抗逆向攻击最有效的方式 ...

  2. APP加固技术历程及未来级别方案:虚机源码保护

    传统App加固技术,前后经历了四代技术变更,保护级别每一代都有所提升,但其固有的安全缺陷和兼容性问题始终未能得到解决.而下一代加固技术-虚机源码保护,适用代码类型更广泛,App保护级别更高,兼容性更强 ...

  3. Android App加固原理与技术历程

    App为什么会被破解入侵 随着黑客技术的普及化平民化,App,这个承载我们移动数字工作和生活的重要工具,不仅是黑客眼中的肥肉,也获得更多网友的关注.百度一下"App破解"就有529 ...

  4. 当前安卓App加固到底该如何做到防篡改?

    安卓dalvik虚拟机要求dex文件在内存中以明文形式存在,那么任何加壳方法到头来到了内存还是明文存在,各种dump方法终究是可以获得它的.App究竟应该如何加固才能防止被篡改?   加固和 dump ...

  5. APP加固反调试(Anti-debugging)技术点汇总

    0x00 时间相关反调试 通过计算某部分代码的执行时间差来判断是否被调试,在Linux内核下可以通过time.gettimeofday,或者直接通过sys call来获取当前时间.另外,还可以通过自定 ...

  6. Android常见App加固厂商脱壳方法的整理

    目录 简述(脱壳前学习的知识.壳的历史.脱壳方法) 第一代壳 第二代壳 第三代壳 第N代壳 简述 Apk文件结构 Dex文件结构 壳史 壳的识别 Apk文件结构 Dex文件结构 壳史 第一代壳 Dex ...

  7. 使用360对app安全进行加固

    在写了第一个app之后,打算上架到各个渠道看看,无意间看到了360的app加固工具 http://jiagu.360.cn/ 自己体验了一把,加固过程很傻瓜化, 加固好了之后,还要对app进行二次签名 ...

  8. ionic ios 友盟多渠道/自动签名/加固之腾讯云。乐固

    之前写了一篇文章主要是介绍使用gradle进行多渠道分发处理的文章--链接:http://www.cnblogs.com/happen-/p/6029387.html 最近在做app上线的处理,发现某 ...

  9. android加固系列—2.加固前先要学会破解,调试内存值修改程序走向

    [版权所有,转载请注明出处.出处:http://www.cnblogs.com/joey-hua/p/5138585.html] 因公司项目需要对app加固,经过本人数月的研究,实现了一套完整的仿第三 ...

随机推荐

  1. ZK listbox 两种分页使用及比较

    参考:http://tsinglongwu.iteye.com/blog/849923 以下代码模拟数据量大时情况,采用“<paging>”组件方式 前台Listbox.zul : < ...

  2. Unity3D连接sqlite数据库操作C#版

    unity3d有自己对应的sqlite.dll分别需要三个文件 1.Mono.Data.Sqlite.dll 在unity安装文件“Unity\Editor\Data\MonoBleedingEdge ...

  3. tomcat配置https

    1.开启使用https协议 编辑tomcat目录下的conf/server.xml文件 <Connector port="443" protocol="HTTP/1 ...

  4. Docker对普通开发者的用处(转)

    有些开发者可能还是不明白 Docker 对自己到底有多大的用处,因此翻译 Docker 个人用例 这篇文章中来介绍 Docker 在普通开发者开发过程中的用例. Docker 如今赢得了许多关注,很多 ...

  5. 201301 JAVA题目0-1级

    描述 编写一个函数,传入一个int型数组,返回该数组能否分成两组,使得两组中各元素加起来的和相等,并且,所有5的倍数必须在其中一个组中,所有3的倍数在另一个组中(不包括5的倍数),能满足以上条件,返回 ...

  6. JavaScript 入门教程四 语言基础【3】

    一.数据类型介绍: String 1.是使用 Unicode 字符组成的字符序列.所以可以容纳各种语言. 2.字符串可以使用双引号(“”)或者单引号('')表示,但必须成对出现. 3.转移序列使用 \ ...

  7. CentOS下通过yum安装svn及配置

    CentOS下通过yum安装svn及配置 1.环境centos5.5 2.安装svnyum -y install subversion 3.配置 建立版本库目录mkdir /www/svndata s ...

  8. C++ 用RGB 三种颜色绘图

    #include <iostream> #include <cmath> #include <cstdlib> #define DIM 1024 #define D ...

  9. Swift 必备开发库10个

    1.CryptoSwift swift加密库, 支持md5,sha1,sha224,sha256... github地址: https://github.com/krzyzanowskim/Crypt ...

  10. web应用程序开发原理

    企业应用计算的演变为1.主机/哑终端的集中计算模式: 2.客户机/服务器计算模式:3.浏览器    /服务器计算模式.其中,1具有部署方面的优势,但在一台计算机中进行全部的处理,应用程序难于维护,难于 ...