반응형

전체 글 368

OpenJPEG Code Coverage 코드 작성 및 알고리즘 설명

OpenJPEG Code Coverage 코드 작성 및 알고리즘 설명 IndexCoveraged-Guided FuzzingOpenJPEG Code Coverage AlgorithmOpenJPEG coverage.cCoveraged-Guided Fuzzing AlgorithmCoverage-Guided FuzzingCoverage-Guided Fuzzing은 code coverage 정보를 이용하여 다양한 input을 생성함으로써, 바이너리의 전체적인 control flow를 탐색하도록 하는 방식입니다.동작 설명Coverage-Guided Fuzzing은 다음과 같은 방식으로 동작합니다.초기 seed 데이터를 mutation을 위해 queue에 넣는다.queue에 존재하는 seed를 선택하고, mutati..

JNI function symbol 제거하기

JNI function symbol 제거하기 공유 라이브러리인 so 파일에 다음과 같이 함수 이름이랑 타입 등의 심볼 정보가 있어서 제거하는 방법을 좀 찾아봤다. 역시 스택오버플로우에는 모든게 다 있다!https://stackoverflow.com/questions/17022983/is-it-possible-to-remove-symbols-from-a-shared-library-built-with-android-ndk 다음과 같이 Android.mk에 LOCAL_CFLAGS에 -fvisibility=hidden을 추가해주면 된다. 심볼 정보가 사라졌다!

Android 동작 구조

Android 동작 구조 Android architecture 안드로이드는 스마트 폰을 비롯한 다양한 모바일/임베디드 기기에서 사용할 수 있도록 제작된 Linux 기반의 오픈 소스 소프트웨어 스택입니다. 다음 그림은 해당 구조를 나타냅니다. Linux Kernel Android 플랫폼은 Linux Kernel 기반으로 구성되어 있습니다. 특히, ART(Android runtime)는 스레딩 및 하위 수준의 메모리 관리와 같은 기본 기능에 Linux Kernel을 사용합니다. Linux Kernel 부분에서 담당하는 부분은 다음과 같습니다. ü 메모리 등의 자원 관리 ü 보안 설정 ü 전원 관리 ü 하드웨어 장치 드라이버 관리 ü 네트워크 시스템 관리 등HAL(Hardware Abstraction Laye..

Unity Mono 분석

Unity Mono 분석 .Net Framwork Microsoft에서 개발한 Windows 프로그램 개발 및 실행 환경을 말합니다. 다양한 프로그래밍 언어와 라이브러리들을 이용하여 윈도우 기반 응용프로그램을 개발 및 실행할 수 있도록, MSIL(MicroSoft Intermediate Language)를 사용함으로써 통합된 프로그래밍 환경을 제공합니다. .NET Framework는 지원하는 언어들이 사용할 수 있는 API와 type으로 구성된 Class Library와 쓰레드 관리, garbage collection, 예외 handling 등을 제공하는 CLR(Common Language Runtime)이라는 실행 엔진(일종의 가상머신)으로 구성되어 있습니다. 이 구조를 CLI(Common Langua..

Frida 및 nodejs 사용할 때 TMI

Frida 및 nodejs 사용할 때 TMI1. Memory.readByteArray()로 읽어온 데이터에 접근할 때Memory.readByteArray의 리턴 형은 ArrayBuffer인데, 얘로 가져온 결과는 index로 접근할 수가 없다.다음과 같이 Uint8Array로 변화하여 접근하면 됨.var data2 = Memory.readByteArray(save, 0x18); var data = new Uint8Array(data2); console.log(data[0])2. nodejs char intfromCharCode와 charCodaAt을 이용하여 변환하면 됨.var tmp = String.fromCharCode(data[i] ^ xor_key[i].charCodeAt());3. Native ..

Java.perform() error

Java.perform() error가끔 frida를 사용하면서 Java.perform() callback으로 등록한 함수가 실행이 안되는 경우가 있다.frida가 업데이트 되면서 디바이스 아키텍쳐와 호환이 잘 안돼서 생기는 문제라는데, 정확한 이유는 잘 모르겟따.아무튼 그냥 Java.perform() 대신에 Java.performNow()를 사용하면 되더라.var t = Module.findExportByName('libc.so', 'strstr'); console.log("strstr @ " + t.toString()); ​ Interceptor.attach(t, { onEnter: function(args){ }, onLeave: function(retval){ retval.replace(0); }..

nasm을 이용한 asm 코딩

nasm을 이용한 asm 코딩사용할 때마다 사소한게 자꾸 헷갈려서 대충 적어둔다. test.asmsection .text global main ;extern printf ​ main : xor eax, eax mov ecx, 100 cmp ecx, 0 je $ + 0x7 add eax, ecx dec ecx jmp $ - 0x8 push eax ret nop nop ​ section .data ;string db "%d", 0위는 short jump를 이용하여 1부터 100까지 더하는 for문 코드이다. 위처럼 대충 작성한 다음 다음처럼 nasm과 gcc를 이용하여 컴파일할 수 있다.ch4rli3kop at ubuntu in ~ $ nasm -f elf32 test.asm -o test.o ​ ch4rl..

IDA JNI Function 적용하기

IDA JNI Function 적용하기JNI은 Java Native Interface로 JAVA 환경이 아닌 다른 프로그래밍 언어 환경의 코드를 사용하기 위해 사용된다.이에 대한 설명은 뭐 다른 좋은 자료들을 찾아보길 바란다. Wikipedia의 Sample 코드를 보면 JNI Native Function은 다음과 같이 구성된다. 함수의 타입은 매핑 타입으로 몇 가지 정의되며, 이름은 클래스, 메소드 네임으로 구성된다.extern "C" JNIEXPORT void JNICALL Java_ClassName_MethodName (JNIEnv *env, jobject obj, jstring javaString) { const char *nativeString = env->GetStringUTFChars(jav..

블랙보드 출석체크 변조

블랙보드 출석체크 변조하기 대수학을 너무나도 듣기 싫은 마음에 진도를 빨리 앞당겨버리는 방법을 찾고 싶었다. 동영상을 종료할 때의 동작과 이번에 새로 생긴 학습종료 버튼을 눌렀을 때의 동작이 사용자의 진도를 업데이트하는 부분이라고 생각하여 패킷을 조사해봤다. TLS 암호화 통신을 지원하지만, 복호화를 통해 살펴볼 수 있었고 다음과 같이 단순 GET 요청으로 서버에게 전송하는 동작을 확인할 수 있었다. 추측컨데, 학습 진도를 서버에서 처리하지 않고 클라이언트에서 계산하여 서버로 전송하면, 해당 값을 그대로 업데이트 하는 것 같다. 이 Request를 변조하면 내 맘대로 내 학습 진도를 땡길 수 있다고 생각하여 다음과 같이 프록시를 통해 변조 작업을 수행해봤다. 현재 수업을 듣지 않아 아래 하단바의 진행 창..

반응형