搭建android竞品系统crossscan的一点思路

1:通过逆向分析提取antiy 的 scanner的SDK

2:创建android工程,由于是命令行,所以无需带activity;

package com.antiy.sdk;
import android.content.res.AssetManager;

public class AVLA
{

    public AVLA()
    {
    }

    public native String GetEngVersion();

    public native String GetLibVersion();

    public native int Init(String s);

    public native int Release();

    public native String[] Scan(String s);

    public native int SetMode(int i);

    public native int UnzipFromAssets(AssetManager assetmanager, String s);

    public native int Update(String s, String s1);

    static 
    {
        //System.loadLibrary("avla");
    	System.load("/data/data/org.crazyit.toast/lib/libavla.so");
    }
}


使用antiy的SDK:

antiycmd.java

package org.crazyit.toast;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import com.antiy.sdk.AVLA;

public class antiycmd {
	static List<String> fl = new ArrayList<String>();
	//取出文件
	private static List<String> getMyFile(AVLA avla,String pathString)
	{
	 //局部变量 记录文件路径
	List<String> it=new ArrayList<String>();

	 //指定文件目录
	File f=new File(pathString);

	 //递归
	getFileList(avla,f);

	 //递归完毕,提出全局量fl里面的内容
	for(int i = 0; i < fl.size(); i++)
	 {
	   it.add(fl.get(i));
	 }
	 return it;
	 }
	//递归函数
	public static void getFileList(AVLA avla,File file)
	 {
	//列出指定路径下所有文件
		System.out.println("1\n");
	   File[] files = file.listFiles();
	   System.out.println("2\n");
	//遍历当前各个文件
	   for(int i = 0; i < files.length; i++)
	   {
		   System.out.println("3\n");
	     File f = files[i];
	     System.out.println("4\n");
	     if(f.isFile())
	     {
	    	 
	    	 System.out.println(f.getPath());
	    	 String[] strarry=avla.Scan(f.getPath());
	    	 if(strarry!=null)
	    	 {
	    		 System.out.println(f.getPath()+"->"+strarry[0].toString());
	    	 }else {
	    		 System.out.println(f.getPath()+"->clean");
	    	 }
	     }else if(f.isDirectory())
	     {
	//不是文件,而是文件夹,进一步检查这个文件夹下面文件
	       getFileList(avla,f);
	     }
	   }
	 } 
	public static void main(String[] argc){
        AVLA avla = new AVLA();
        File file = new File("/data/data/org.crazyit.toast/files/avl/");
        if(file.exists())
        {
	        avla.Init("/data/data/org.crazyit.toast/files/avl/");
	        avla.SetMode(127);
	        //getMyFile(avla,"/data/data/org.crazyit.toast/files/avl/");
	        if(argc.length==1)
	        {
	        	System.out.println(argc[0].toString());
	        	getMyFile(avla,argc[0].toString());
	        	
	        }else {
	        	System.out.println("pls input the path of samples..\n");
			}
        }else{
        	System.out.println("seems the malware db not yet inited..\n");
        }
        avla.Release();
    }
}

ToastTest.java
package org.crazyit.toast;
import com.antiy.sdk.*;
import java.io.File;
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;

/**
 * Description:
 * <br/>site: <a href="http://www.crazyit.org">crazyit.org</a> 
 * <br/>Copyright (C), 2001-2012, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
public class ToastTest extends Activity
{
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		Button simple = (Button)findViewById(R.id.simple);
		//为按钮的单击事件绑定事件监听器
		simple.setOnClickListener(new OnClickListener()
		{
			//@Override
			public void onClick(View source)
			{
				//创建一个Toast提示信息
				File file = new File((new StringBuilder(String.valueOf(getFilesDir().getAbsolutePath()))).append("/avl/conf/liscense.conf").toString());
				if(!file.exists())
				{
					android.content.res.AssetManager assetmanager = getAssets();
					String s = getFilesDir().getAbsolutePath();
					File file1 = new File(s);
					if(!file1.exists())
		                file1.mkdir();
					(new AVLA()).UnzipFromAssets(assetmanager, (new StringBuilder(String.valueOf(s))).append("/").toString());
				}
				AVLA avla = new AVLA();
		        avla.Init((new StringBuilder(String.valueOf(getFilesDir().getAbsolutePath()))).append("/avl").toString());
		        //int i= avla.Update(null, null);
		        String s1 = avla.GetEngVersion();
		        String s2 = avla.GetLibVersion();	        
		        avla.Release();
				Toast toast = Toast.makeText(ToastTest.this
					, "Antiy SDK installed:"+"\nEngVer"+s1+"\nLibVer:"+s2
					// 设置该Toast提示信息的持续时间
					, Toast.LENGTH_SHORT);
				toast.show();
			}
		});
	}
}

 
3:build之后, 通过dalvikvm执行 apk
比如):
adb shell dalvikvm -cp /data/app/org.crazyit.toast-1.apk org.crazyit.toast.antiycmd /mnt/sdcard/antiy/
这里的org.crazyit.toast-1.apk,这里的名字后缀不是-1就是-2,目前我还没发现有-3的。第一次安装是-1,第二次是-2,再次又回到-1。

备注:该程序后续的一些思考,这个程序可以用来做竞品的crossscan系统,思路是这样的,可以插入一个包含main函数的包,然后通过命令行来调用apk中的这个包的main函数就如上面的例子一样,剩下的你只需要找到扫描引擎中的目录扫描函数(什么没有?那扫描文件的函数总有吧)这样可以实现命令行下调用,命令行下获取结果,如果你写过类似的程序,应该很容易想到使用一些脚本程序来控制模拟器来实现了。应该很多安全厂商都有类似的竞品系统吧,呵呵。不知道这么说是否明白了。



 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值