android 逆向工程 smail 语法学习

本文介绍了Android逆向工程中的Smail语言,探讨如何通过学习Smail来保护自己的代码,防止被反编译。文章详细解析了Smail语法,包括类、方法、参数和变量的表示,以及常见的操作。通过对示例代码的分析,读者可以了解Smail语法的基本结构和使用。
摘要由CSDN通过智能技术生成

         众所周知,android 是开源的,现在市场上反编译别人的劳动果实的人也不少,所以我们也是有必要学习下smail语言,(就是android工程反编译后出的语法语音),看看改怎么给我们的代码 “埋雷” ,才能更好的保护好我们自己的劳动成果。

接下来就让我们来学习下吧~!(事先声明:本人也是初学smail语言,有介绍不当的地方还请海涵,并请指出,大家一起学习)


package com.example.pushdemo;

import java.io.ByteArrayInputStream;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

import com.sogou.udp.push.PushManager;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initPush();
        initViewId();
        getSingInfo();
    }

    private void initViewId() {
        Button btn= (Button) findViewById(R.id.btn);
        btn.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(), "hello word", Toast.LENGTH_SHORT).show();
            }
        });
    }
    
    public void btn(View v){
        Toast.makeText(this, R.string.app_name, Toast.LENGTH_SHORT).show();
    }

    public void getSingInfo() {
        try {
            PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
            Signature[] signs = packageInfo.signatures;
            Signature sign = signs[0];
            parseSignature(sign.toByteArray());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void parseSignature(byte[] signature) {
        try {
            CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
            X509Certificate cert = (X509Certificate) certFactory.generateCertificate(new ByteArrayInputStream(signature));
            String pubKey = cert.getPublicKey().toString();
            String signNumber = cert.getSerialNumber().toString();
            System.out.println("signName:" + cert.getSigAlgName());
            System.out.println("pubKey:" + pubKey);
            System.out.println("signNumber:" + signNumber);
            System.out.println("subjectDN:" + cert.getSubjectDN().toString());
        } catch (CertificateException e) {
            e.printStackTrace();
        }
    }

    private void initPush() {
        PushManager.initialize(this.getApplicationContext());
        PushManager.bindPushService(this.getApplicationContext());
    }
    
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
         outState.putString("lastPath", "/sdcard/android123/cwj/test");
         System.out.println("lastPath");
    }
    
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        String cwjString = savedInstanceState.getString("lastPath");   
        System.out.println(cwjString);
    }
}

--------------------------------上面是java 代码对应下面的smail语法------------------------------------

.class public Lcom/example/pushdemo/MainActivity;       、、在虚拟机中,找到这个MainActivity类文件
.super Landroid/app/Activity;                              、、对应的是super.onCreate(savedInstanceState); 在父类中找到Activity这个类
.source "MainActivity.java"                                、、资源文件,MainA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值