安卓逆向工程师岗位在近年来算是互联网IT行业的香饽饽之一,月薪动辄上万年薪动辄20万,让很多行业内兢兢业业拿一个五六千的外行人士很是羡慕。但是安卓逆向工程是专业技术要求很高的职业,外行人轻易抢不走你的饭碗,因此也有大量的人花很多金钱投资自己,学会了安卓逆向,想要入行分一杯羹。
光学会技术,并不等于就能找到一份好的工作。要找到一个很好的安卓逆向工程师岗位,我们一定不能忽视其中最为重要的环节——面试。
安卓逆向工程师在面试时,需要你掌握什么技能,面试官会怎样考核你?这些东西对于一位安卓逆向求职者来说,至关重要。毕竟相信很多和小编一样愿意花钱学好安卓逆向的人,应该都不是心血来潮,而是真的希望借此技术谋得一份高薪的工作。
安卓逆向工程必须掌握的技能:
必备技能:
1、负责安卓程序的加解密和数据传输分析、拆解、逆向等工作;
2、逆向APK,了解运行过程;
3、Andorid本地提权获得root权限;
4、熟练掌握软件逆向静态分析、动态调试、代码跟踪等;
5、熟悉Android开发,了解打包、反编译、破解流程;
6、so破解、加壳。
面试中对应的具体要求:
1、加解密:一般都是遇到后再折腾解密,而且解密代码和秘钥一般都在代码里面。
2、了解apk的具体含义,结合安卓开发进行反编译。
3、Andorid本地提权获得root权限,一般真机是用recovery刷机包,但是病毒提权是怎么样的,目前掌握的一种提权的是像输入命令行一样输入su并且用pm提权,还有一种是修改init.rc文件。
4、主要掌握ida动态调式和代码跟踪
5、打包,编译和破解的流程是什么样的?
6、so破解:一般就是破壳。如360等。
补充:
加壳的另一种常用的方式是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,做一些额外的工作。大多数病毒就是基于此原理。加壳的程序经常想尽办法阻止外部程序或软件对加壳程序的反汇编分析或者动态分析,以达到它不可告人的目的。这种技术也常用来保护软件版权,防止被软件破解。
安卓逆向工程师的任职要求
岗位职责:
总结下来要求如下:
1、具有丰富的Android开发分析经验,熟悉Android系统架构,熟悉android安全机制;
2、精通汇编语言、Java、C/C++语言,熟悉Smali语言,对逆向工程有浓厚兴趣;
3、熟练掌握ida、gdb逆向分析工具;
4、熟练掌握软件逆向静态分析、动态调试、代码跟踪等;
5、熟悉so和java层hook;
6、熟悉Android开发,了解打包、反编译、破解流程;
7、深入理解arm linux和Android底层运行机制;
8、熟练掌握各种调试工具:Smali、Dedexer、Dexdump、Apktool、Dex2jar、jd-gui。
面试官可能问到的问题?
question:
1.Android的生命周期
onCreate - onStart - onResume-onPause-onStop-onDestory-onRestart
2.Android的入口函数?
继承了application类中的attachContext,onCreate
3.xposed框架的原理及常用函数?
替换system/bin/app_process文件,app_process就是zygote进程文件,所以xposed通过替换zygote进程实现了控制手机上所有app进程
常用函数
(1)findAndHookMethod
(2)findAndHookConstructor hook构造函数
(3)findClass:使用指定的类加载器查找类
(4)findField : 在类中查找自动并将其设置为可访问
(5)CallMethod 调用给定对象的实例或静态方法
(6)newInstance 创建给定类的新实例
4.hook和注入有哪些?
l hook:反射(在程序运行的时候,对任意一个类,都可以获取其方法及变量)
l java的动态代理(smali注入)
5.反调试
lTracerpid不等于0
lPtrace自身.
l IsDebuggerConnect。
(这部分内容比较多,反调试可以找我细细给你分析)
6.逆向技术工具及免费资料获取+v:13140310004
总之机会永远是留给有准备的人,如果你不是天才的话,在进行安卓逆向工程师面试前,最好要做好充足的准备。毕竟一份好的工作如果失去了是最大的损失,也是对自己苦苦学习安卓逆向技术的不尊重、不负责。如果你的安卓逆向技术够硬,那么不妨投一投简历,做好准备,去接受岗位与考核官的审核吧!