1. apk를 압축해제. (확장자를 zip으로 변경하여 해제)


2. dex2jar 을 이용하여 apk에 포함된 dex파일을 jar 파일로 변환.


3. jd_gui 를 이용하여 jar 파일을 decompile 후 분석


Posted by EXSO
,

 


Decompile

apktool.jar d[ecode] [OPTS] <file.apk> [<dir>]

OPTS:
-s, --no-src
      Do not decode sources.
-r, --no-res
      Do not decode resources.
-d, --debug
      Decode in debug mode. Check project page for more info.
-f, --force
     
Force delete destination directory.-t <tag>, --frame-tag <tag>


Build

apktool.jar
b[uild] [OPTS] [<app_path>] [<out_file>]

OPTS:
                 -f, --force-all
                     Skip changes detection and build all files.
                 -d, --debug
                     Build in debug mode. Check project page for more info.

apk Sign
 
Usage: signapk publickey.x509[.pem] privatekey.pk8 input.jar output.jar


 

Posted by EXSO
,

리소스 데이터를 파일로 저장.

구현코드 : 계산기 파일을 리소스에 포함시킨 상태로 컴파일 후 실행시 현재디렉토리에 생성

#include "stdafx.h"
#include "resource.h"

void main()
{
 HRSRC hResource;
 HGLOBAL hResData;
 LPVOID lpResource;
 DWORD dwSize;
 HANDLE hFile;
 DWORD dwNumberOfBytes;

 hResource = FindResource(GetModuleHandle(0),MAKEINTRESOURCE(IDR_FILE1), TEXT("FILE") );
 // 리소스의 핸들값을 얻어온다

 hResData = LoadResource(GetModuleHandle(0),hResource);
 // 지정된 리소스를 메모리로 로드한다. 반환값은 로드된 리소스의 핸들이다.

 lpResource = LockResource(hResData);
 // LoadResource 를 통해 메모리로 로드한 리소스의 시작 주소를 얻어온다.

 dwSize = SizeofResource(GetModuleHandle(0),hResource);
 // 리소스의 크기를 얻어온다

 hFile = CreateFile(TEXT("calc.exe"), GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
 // 리소스를 저장할 파일을 생성한다.

 WriteFile(hFile, lpResource, dwSize, &dwNumberOfBytes, NULL);
 // 파일에 메모리상의 리소스를 저장한다.

 CloseHandle(hFile);
 // 파일의 핸들을 닫아준다.
 
}


Posted by EXSO
,