아름다운일상블로그
[코드몽키]해킹 과외 - [수강생 전용] 자료[각종 해킹툴 및 설명서] 코코스,유니티,언리얼 엔진해킹용 본문
유니티 엔진으로 apk를 빌드하려면 유니티코리아https://unity3d.com/kr
이곳에서 회원가입을 해서 유니티계정을 하나 생성하셔야합니다.
엔진 설치 후 위 링크에서 회원가입해서 계정하나 파세요~
자신의PC에 맞는 버전으로 다운로드
[※매우중요]-Java환경변수설정 = 구글링해서 세팅해두세요
#중요하지만 매우간단합니다.
-해킹완료후 순정폰에서 설치가 가능하게만들어주는 서명툴입니다.
APK를 디컴파일없이 간단하게 풀어보는 파일압축툴입니다.
자신의 PC에 맞는 버전으로 다운로드.
원랜 디컴파일&컴파일러로 하는것이 정석이나, 저희는
속성으로 APK 분해 - 수정 - 재조립이 주된 목적이므로
가장 쉽고 빠른 방법을 알려드릴 예정입니다.
.NetReflector 키-제네레이터
C# 강력한 해킹툴
소스코드를 비교분석
소스코드비교분석용 교재
APK디컴파일&컴파일러
유니티빌드IL2CPP방식의 빌드 메모리주소 줄세우기
ARM코드를 이용한 해킹
ARM코드를 이용한 해킹
게임에 핵 On/Off 기능 삽입하기
브레이브프론티어
So해킹용
메모리덤프용
자료형 |
형식 |
범위 |
크기 |
sbyte |
System.SByte |
-128 ~ 127 |
부호 있는 8 bit 정수 |
byte |
System.Byte |
0 ~ 255 |
부호 없는 8 bit 정수 |
short |
System.Int16 |
-32,768 ~ 32,767 |
부호 있는 16 bit 정수 |
ushort |
System.UInt16 |
0 ~ 65,535 |
부호 없는 16 bit 정수 |
int |
System.Int32 |
-2,147,483,648 ~ 2,147,483,647 |
부호 있는 32 bit 정수 |
uint |
System.UInt32 |
0 ~ 4,294,967,295 |
부호 없는 32 bit 정수 |
long |
System.Int64 |
-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,808 |
부호 있는 64 bit 정수 |
ulong |
System.UInt64 |
0 ~ 18,446,744,073,709,551,615 |
부호 없는 64 bit 정수 |
float |
System.Single |
±1.5e-45 ~ ±3.4e38 |
4 byte |
double |
System.Double |
±5.0e-324 ~ ±1.7e308 |
8 byte |
decimal |
System.Decimal |
±1.0 × 10−28 ±7.9 × 1028 |
16 byte |
char |
System.Char |
U+0000 ~ U+ffff |
유니코드 16 bit 문자 |
string |
System.String |
|
유니코드 문자열 |
bool |
System.Boolean |
|
4 byte |
어셈블리어 명령어 모음ARM
명 령 어 |
설 명 |
|
Data Transfer |
||
MOV |
Move |
데이터 이동 (전송) |
PUSH |
Push |
오퍼랜드의 내용을 스택에 쌓는다 |
POP |
Pop |
스택으로부터 값을 뽑아낸다. |
XCHG |
Exchange Register/memory with Register |
첫 번째 오퍼랜드와 두 번째 오퍼랜드 교환 |
IN |
Input from AL/AX to Fixed port |
오퍼랜드로 지시된 포트로부터 AX에 데이터 입력 |
OUT |
Output from AL/AX to Fixed port |
오퍼랜드가 지시한 포트로 AX의 데이터 출력 |
XLAT |
Translate byte to AL |
BX:AL이 지시한 데이블의 내용을 AL로 로드 |
LEA |
Load Effective Address to Register |
메모리의 오프셋값을 레지스터로 로드 |
LDS |
Load Pointer to DS |
REG←(MEM), DS←(MEM+2) |
LES |
Load Pointer ti ES |
REG←(MEM), ES←(MEM+2) |
LAHF |
Load AH with Flags |
플래그의 내용을 AH의 특정 비트로 로드 |
SAHF |
Store AH into Flags |
AH의 특정 비트가 플래그 레지스터로 전송 |
PUSHF |
Push Flags |
플래그 레지스터의 내용을 스택에 쌓음 |
POPF |
Pop Flags |
스택으로부터 플래그 레지스터로 뽑음 |
Arithmetic |
||
ADD |
Add |
캐리를 포함하지 않은 덧셈 |
SBB |
Subtract with Borrow |
캐리를 포함한 뺄셈 |
DEC |
Decrement |
오퍼랜드 내용을 1 감소 |
NEG |
Change Sign |
오퍼랜드의 2의 보수, 즉 부호 반전 |
CMP |
Compare |
두 개의 오퍼랜드를 비교한다 |
ADC |
Add with Carry |
캐리를 포함한 덧셈 |
INC |
Increment |
오퍼랜드 내용을 1 증가 |
AAA |
ASCII adjust for Add |
덧셈 결과 AL값을 UNPACK 10진수로 보정 |
DAA |
Decimal adjust for Add |
덧셈 결과의 AL값을 PACK 10진수로 보정 |
SUB |
Subtract |
캐리를 포함하지 않은 뺄셈 |
AAS |
ASCII adjust for Subtract |
뺄셈 결과 AL값을 UNPACK 10진수로 보정 |
DAS |
Decimal adjust for Subtract |
뺄셈 결과의 AL값을 PACK 10진수로 보정 |
MUL |
Multiply (Unsigned) |
AX와 오퍼랜드를 곱셈하여 결과를 AX 또는 DX:AX에 저장 |
IMUL |
Integer Multiply (Signed) |
부호화된 곱셈 |
AAM |
ASCII adjust for Multiply |
곱셈 결과 AX값을 UNPACK 10진수로 보정 |
DIV |
Divide (Unsigned) |
AX 또는 DX:AX 내용을 오퍼랜드로 나눔. 몫은 AL, AX 나머지는 AH, DX로 저장 |
IDIV |
Integer Divide (Signed) |
부호화된 나눗셈 |
AAD |
ASCII adjust for Divide |
나눗셈 결과 AX값을 UNPACK 10진수로 보정 |
CBW |
Convert byte to word |
AL의 바이트 데이터를 부호 비트를 포함하여 AX 워드로 확장 |
CWD |
Convert word to double word |
AX의 워드 데이터를 부호를 포함하여 DX:AX의 더블 워드로 변환 |
Logic |
||
NOT |
Invert |
오퍼랜드의 1의 보수, 즉 비트 반전 |
SHL/SAL |
Shift logical / arithmetic Left |
왼쪽으로 오퍼랜드만큼 자리 이동 (최하위 비트는 0) |
SHR |
Shift logical Right |
오른쪽으로 오퍼랜드만큼 자리 이동 (최상위 비트 0) |
SAR |
Shift arithmetic Right |
오른쪽 자리이동, 최상위 비트는 유지 |
ROL |
Rotate Left |
왼쪽으로 오퍼랜드만큼 회전 이동 |
ROR |
Rotate Right |
오른쪽으로 오퍼랜드만큼 회전 이동 |
RCL |
Rotate through Carry Left |
캐리를 포함하여 왼쪽으로 오퍼랜드만큼 회전 이동 |
RCR |
Rotate through Carry Right |
캐리를 포함하여 오른쪽으로 오퍼랜드만큼 회전 이동 |
AND |
And |
논리 AND |
TEST |
And function to Flags, no result |
첫 번째 오퍼랜드와 두 번째 오퍼랜드를 AND하여 그 결과로 플래그 세트 |
OR |
Or |
논리 OR |
XOR |
Exclusive Or |
배타 논리 합 (OR) |
String Manipulation |
||
REP |
Repeat |
REP 뒤에 오는 스트링 명령을 CX가 0이 될 때까지 반복 |
MOVS |
Move String |
DS:SI가 지시한 메모리 데이터를 ES:DI가지시한 메모리로 전송 |
CMPS |
Compare String |
DS:SI와 ES:DI의 내용을 비교하고 결과에 따라 플래그 설정 |
SCAS |
Scan String |
AL 또는 AX와 ES:DI가 지시한 메모리 내용 비교하고 결과에 따라 플래그 설정 |
LODS |
Load String |
SI 내용을 AL 또는 AX로 로드 |
STOS |
Store String |
AL 또는 AX를 ES:DI가 지시하는 메모리에 저장 |
Control Transfer |
||
CALL |
Call |
프로시저 호출 |
JMP |
Unconditional Jump |
무조건 분기 |
RET |
Return from CALL |
CALL로 스택에 PUSH된 주소로 복귀 |
JE/JZ |
Jump on Equal / Zero |
결과가 0이면 분기 |
JL/JNGE |
Jump on Less / not Greater or Equal |
결과가 작으면 분기 (부호화된 수) |
JB/JNAE |
Jump on Below / not Above or Equal |
결과가 작으면 분기 (부호화 안 된 수) |
JBE/JNA |
Jump on Below or Equal / not Above |
결과가 작거나 같으면 분기 (부호화 안 된 수) |
JP/JPE |
Jump on Parity / Parity Even |
패리티 플레그가 1이면 분기 |
JO |
Jump on Overflow |
오버플로가 발생하면 분기 |
JS |
Jump on Sign |
부호 플레그가 1이면 분기 |
JNE/JNZ |
Jump on not Equal / not Zero |
결과가 0이 아니면 분기 |
JNL/JGE |
Jump on not Less / Greater or Equal |
결과가 크거나 같으면 분기 (부호화된 수) |
JNLE/JG |
Jump on not Less or Equal / Greater |
결과가 크면 분기 (부호화된 수) |
JNB/JAE |
Jump on not Below / Above or Equal |
결과가 크거나 같으면 분기 (부호화 안 된 수) |
JNBE/JA |
Jump on not Below or Equal / Above |
결과가 크면 분기 (부호화 안 된 수) |
JNP/JPO |
Jump on not Parity / Parity odd |
패리티 플레그가 0이면 분기 |
JNO |
Jump on not Overflow |
오버플로우가 아닌 경우 분기 |
JNS |
Jump on not Sign |
부호 플레그가 0이면 분기 |
LOOP |
Loop CX times |
CX를 1감소하면서 0이 될 때까지 지정된 라벨로 분기 |
LOOPZ/LOOPE |
Loop while Zero / Equal |
제로 플레그가 1이고 CX≠0이면 지정된 라벨로 분기 |
LOOPNZ/LOOPNE |
Loop while not Zero / not Equal |
제로 플레그가 0이고 CX≠0이면 지정된 라벨로 분기 |
JCXZ |
Jump on CX Zero |
CX가 0이면 분기 |
INT |
Interrupt |
인터럽트 실행 |
INTO |
Interrupt on Overflow |
오버플로우가 발생하면 인터럽트 실행 |
IRET |
Interrupt Return |
인터럽트 복귀 (리턴) |
Processor Control |
||
CLC |
Clear Carry |
캐리 플레그 클리어 |
CMC |
Complement Carry |
캐리 플레그를 반전 |
CLD |
Clear Direction |
디렉션 플레그를 클리어 |
CLI |
Clear Interrupt |
인터럽트 플레그를 클리어 |
HLT |
Halt |
정지 |
LOCK |
Bus Lock prefix |
|
STC |
Set Carry |
캐리 플레그 셋 |
NOP |
No operation |
|
STD |
Set Direction |
디렉션 플레그 셋 |
STI |
Set Interrupt |
인터럽트 인에이블 플레그 셋 |
WAIT |
Wait |
프로세서를 일지 정지 상태로 한다 |
ESC |
Escape to External device |
이스케이프 명령 |
8086 지시어
지시어 |
내 용 |
형 식 |
SEGMENT |
어셈블리 프로그램은 한 개 이상의 세그먼트들로 구성된다. SEGMENT 지시어는 하나의 세그먼트를 정의한다. |
segname SEGMENT ; 세그먼트 시작 |
PROC |
매크로 어셈블리에서는 프로그램의 실행 부분을 모듈로 작성할 수 있다. 이 모듈을 프로시저(Procedure)라 부르며, PROC 지시어가 이를 정의한다. |
procname PROC ; 프로시저의 시작 |
ASSUME |
어셈블러에게 세그먼트 레지스터와 사용자가 작성한 세그먼트의 이름을 연결시킨다. |
ASSUME SS:stack_segname, |
END |
전제 프로그램의 끝을 나타냄 |
END |
데이터 정의 지시어 : 프로그램에서 데이터를 저장할 기억 장소를 정의, 초기값 부여 |
||
DB |
Define Byte |
name DB 초기값 |
DW |
Define Word |
name DW 초기값 |
DD |
Define Double Word |
name DD 초기값 |
DQ |
Define Quad Word |
name DQ 초기값 |
DT |
Define Ten Bytes |
name DT 초기값 |
EQU |
변수 이름에 데이터값이나 문자열 정의 |
name EQU 데이터값/문자열 |
= |
EQU와 달리 정의된 값을 변경 가능 |
|
EVEN |
어셈블리시 이 지시어가 사용되는 곳의 주소가 짝수로 되도록 함 |
|
PAGE |
어셈블리 리스트의 형식을 결정 |
PAGE [length][,width] |
TITLE |
어셈블리 리스트의 각 페이지에 제목 출력 |
TITLE text |
const/4 v0, 0x1
const-string v1, "CODEMONKEY ANDROID - HTTPS://CODEMON.TISTORY.COM"
invoke-static {p0, v1, v0}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
move-result-object v0
invoke-virtual {v0}, Landroid/widget/Toast;->show()V