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

来源:互联网 发布:windows outlook下载 编辑:程序博客网 时间:2024/06/05 17:22
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{@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Button simple = (Button)findViewById(R.id.simple);//为按钮的单击事件绑定事件监听器simple.setOnClickListener(new OnClickListener(){//@Overridepublic 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函数就如上面的例子一样,剩下的你只需要找到扫描引擎中的目录扫描函数(什么没有?那扫描文件的函数总有吧)这样可以实现命令行下调用,命令行下获取结果,如果你写过类似的程序,应该很容易想到使用一些脚本程序来控制模拟器来实现了。应该很多安全厂商都有类似的竞品系统吧,呵呵。不知道这么说是否明白了。



 
原创粉丝点击