1.我写的一个简单的Andriod小Demo,“轮盘赌!”。
- package com.example.forreversedemo;
- import java.util.Random;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.Toast;
- public class MainActivity extends Activity implements OnClickListener{
- private Button button; //按钮
- public int count = 0; //计数
- public int[] bullet =new int[]{0,0,0,0,0,0}; //用数组来表示弹夹,没子弹时数组元素为0,有子弹时,数组元素之一随机赋值为1
- public int a;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- button= (Button) findViewById(R.id.start_count);
- button.setOnClickListener(this);
- }
- @Override
- public void onClick(View arg0) {
- switch(arg0.getId()){
- case R.id.start_count:
- Random random = new Random();
- //第一次点击按钮把第一颗子弹上膛
- if(count == 0){
- MessageBox("子弹已上膛!");
- bullet[random.nextInt(6)] = 1;
- count++;
- break;
- }
- //第2次点击,实现转动轮盘至停止
- if(count == 1){
- int count1 = -1;
- for (int i = 0;i<random.nextInt(6)+60000; i++) {
- count1++;
- if(count1 == 6)count1 = 0; //循环遍历弹夹,也可以用while和for来做,这里为分析方便起见
- a = bullet[count1];
- }
- MessageBox("抠动扳机开火吧!");
- count++;
- break;
- }
- //第3次点击就是开火!
- if(count == 2){
- if(a == 1){
- MessageBox("啪!爆头!");
- count = 0;
- }else{
- MessageBox("你真幸运!");
- count = 0;
- }
- }
- break;
- default:
- break;
- }
- }
- //弹出提示,额,这个函数名很熟悉吧,WinAPI啊,开个玩笑
- public void MessageBox(String text){
- Toast.makeText(this, text, Toast.LENGTH_LONG).show();
- }
- }
2.逆向这个Demo!
唯一的一本书:非虫大大的书《Android软件安全与逆向分析》
其中非虫的书的第三章和我转的那篇文章对于smali的语法进行了详细的介绍,当然你也可以下个官方文档看。总之,初学者在看下面的smali代码时,一定要对照参考我给你推荐的,下面的注释,在我看来,我写的还算详细但避免不了疏漏和有争议的地方,希望大家分析代码时,能多加思考,更欢迎大家的建议和批评指正。
得到smali代码如下
MainActivity.smali (表示在用MK写博客时,贴smali代码用ruby格式最好^_^,有没有更好的方法呢
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!