从大三伊始到大四落幕,从刚开始接触Android到辞掉第一份实习工作,我接触Android应用层开发也快接近两年了。越来越发觉Android的应用层已经没什么挑战性了,想当初刚开始学习Android的时候,弄了一个Activity出来显示在手机的那份喜悦,真是~哈哈~,应用层的开发无非也就调用JDK,SDK而已,现在感觉有点小儿科啊,实习期间,每当工作项目之余,基本都泡到自定义View的绘制去,那也是我所能解闷的工作了。可是,这并不符合的职业规划,我想往前发展,比如framework层或者其他深层的技术等。
因为实习将近一年,在Android开发方面有一定的经验,再加上自己是应届生,所以有家稍微有点大但名气比较低(起码叫我面试的时候我都没听过这公司,额。。)的上市公司给我伸出了橄榄枝,从白纸开始培养人才。又因为提供的岗位叫Android逆向分析工程师,以前就听过这霸气的名字了,实际就是白帽子的工作,所以我也签了这公司,来实习了,毕竟还有一个月才能拿到毕业证。
说实话,逆向分析已经和Android应用开发不是一个level了,也和应用层开发没什么关系了,只是逆向分析需要熟悉应用层开发中的内容而已,比如反编译后要找到某个Activity或着fragment,总之,你要定位到关键代码,那你就必须得熟悉Android应用层的开发内容,尤其是混淆过,那就更需要熟悉开发的结构了,不然要在一大堆反编译的文件中找到你要的代码简直就令人发怵。
嗯,废话不多说,既然没有什么经验,那么就好好学习。先来个入门的工作,就是利用dex2jar反编译一个APK,并用jd-gui.exe查看jar包内容。
第一步,先写个简单的工程,并签名打包导出APK。
LoginActivity.java:
public class LoginActivity extends Activity {
private final String ACCOUNT="samuel";
private final String PASSWORD="123456";
private EditText etAccount, etPassword;
private Button btnLogin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
etAccount=(EditText)findViewById(R.id.et_account);
etPassword=(EditText)findViewById(R.id.et_password);
btnLogin=(Button)findViewById(R.id.btn_login);
btnLogin.setOnClickListener(new View.OnClickListener() {
@Ov