한글로 작성되어 있는 pdf파일을 hwp로 변환했을때, pdf2hwpA에서 멈춘다. 즉 변환할때 pdf2hwpA라는 함수를 사용하고, 이 함수를 잘 이용해서 harness를 작성해보면 될거같다.
Ghidra로 본 Decompile된 함수의 모습이다.
void __cdecl pdf2hwpA(char *param_1,char *param_2,int param_3,int *param_4) iVar3 = FUN_1006f7a0(param_1,&stack0xfffffdf0,param_3,param_4); if (iVar3 == 0) { cVar1 = FUN_1000b410((LPCSTR)(&uStack270 + 1)); if (cVar1 != '\0') { FID_conflict:_wprintf("%s","success converted!"); FUN_100a1cbe(local_8 ^ (uint)&stack0xfffffffc,extraout_EDX,uVar5); return; } pcVar4 = "hwp converting error!"; } else { pcVar4 = "pdf parsing error!"; } FID_conflict:_wprintf("%s",pcVar4); FUN_100a1cbe(local_8 ^ (uint)&stack0xfffffffc,extraout_EDX_00,uVar5); return; }
위 코드에서 변환을 하였을때 완료되었다고 뜨는 아래 부분을 퍼징 대상 함수로 이용할 수 있을거 같다.
FUN_1000b410((LPCSTR)(&uStack270 + 1));
if (iVar3 == 0) { cVar1 = FUN_1000b410((LPCSTR)(&uStack270 + 1)); if (cVar1 != '\0') { FID_conflict:_wprintf("%s","success converted!"); FUN_100a1cbe(local_8 ^ (uint)&stack0xfffffffc,extraout_EDX,uVar5); return; }
대상 함수 Offset = 0xb410
그래서 코드를 작성해보았다.
#include <stdio.h> #include <windows.h> #include <iostream> #include <libloaderapi.h> #pragma warning(disable: 4996) typedef int (*TARGET)(wchar_t* filename); TARGET funcPtr; // LPCSTR = long pointer constant string = const char * extern "C" __declspec(dllexport) __declspec(noinline) int fuzzme(wchar_t* path) { int result = funcPtr(path); return result; } wchar_t* charToWChar(const char* text) { size_t size = strlen(text) + 1; wchar_t* wa = (wchar_t*)malloc(sizeof(wchar_t) * size); mbstowcs(wa, text, size); return wa; } int main(int argc, char* argv[]) { HMODULE DLLHandle = LoadLibrary(L"C:\\Program Files (x86)\\Unidocs\\ezPDFEditor\\ezPDF2HWP.dll"); // dll base address? if (DLLHandle == NULL) { printf("Cannot load ezPDF2HWP.dll\n"); return -1; } int func = (int)DLLHandle + 0xb410;//0x1000B640; funcPtr = (TARGET)func; int reusult = fuzzme(charToWChar(argv[1])); return 0; }
작성 후, DYNAMORIO를 이용하여 컴파일을 시도해 보았다.
해당 에러를 뱉는다...ㅠㅠ
아마 64비트로 AFL을 설치했었는데 그 문제인거 같아 32비트로 다시 해봐야겠다..
+ 32비트로도 AFL을 설치하고 돌려봤는데 동일한 에러가 뜬다...
C:\Users\kwakjunbeom\Desktop\fuzzing\DynamoRIO\bin32>drrun.exe -c C:\\Users\\kwakjunbeom\\Desktop\\fuzzing\\winafl-master\\build32\\bin\Release\\winafl.dll -debug -target_module "C:\\Program Files (x86)\\Unidocs\\ezPDFEditor\\ezPDFEditor.exe" -coverage_module "C:\\Program Files (x86)\\Unidocs\\ezPDFEditor\\ezPDF2HWP.dll" -target_method fuzzme -fuzz_iterations 10 -nargs 1 -- "C:\\Users\\kwakjunbeom\\source\\repos\\pdfreader_fuzzing\\Debug\\pdfreader_fuzzing.exe" "C:\\Users\\kwakjunbeom\\source\\repos\\pdfreader_fuzzing\\pdfreader_fuzzing\\test.pdf"
아래는 오류 log
PDF Reader 퍼징 도전기(3) - Harness 작성
한글로 작성되어 있는 pdf파일을 hwp로 변환했을때, pdf2hwpA에서 멈춘다. 즉 변환할때 pdf2hwpA라는 함수를 사용하고, 이 함수를 잘 이용해서 harness를 작성해보면 될거같다.
Ghidra로 본 Decompile된 함수의 모습이다.
위 코드에서 변환을 하였을때 완료되었다고 뜨는 아래 부분을 퍼징 대상 함수로 이용할 수 있을거 같다.
FUN_1000b410((LPCSTR)(&uStack270 + 1));
대상 함수 Offset = 0xb410
그래서 코드를 작성해보았다.
작성 후, DYNAMORIO를 이용하여 컴파일을 시도해 보았다.
아마 64비트로 AFL을 설치했었는데 그 문제인거 같아 32비트로 다시 해봐야겠다..
+ 32비트로도 AFL을 설치하고 돌려봤는데 동일한 에러가 뜬다...
아래는 오류 log
'Fuzzing' 카테고리의 다른 글