
* WIP: windows frida * frida-windows: fix hooks not present on windows * windows: allow building using cargo xwin * frida-windows: fmrt * frida-windows: cleanup and allow asan/drcov on windows * frida-windows: fmt * frida-windows: fix clippy * frida-windows: handle unknown exceptions gracefully * frida-windows: rework shadow mapping algo * frida-windows: add hook functions * frida-windows: hook functions; fix stack register * minibsod: enable for windows * check_shadow: fix edge casees * asan_rt: rework and add hooks for windows * inprocess: add minibsod on windows * Fix warnings * minibsod: disable test on windows * WIP: HookRuntime * Cleanup after merge * Bump frida-gum version * Fix conflict marker; update frida * Make winsafe windows-specific * Fmt * Format * Better detection of clang++ (using cc) * Make AsanErrors crate public so we can use it in tests * Add helper to get immediate of operand * Use HookRuntime to hook asan functions Tests now passing * fmt * Implement recurisve jmp resolve * Fix reversed logic * windows_hooks: Don't die if functions are already replaced * Allow utils to work on windows * Enable allocator hooking on windows * Warnings; add trace to free * Make ASAN tests run windows (with cargo xwin compilation) * Fmt * clang-format * clang-format * Add more tests * Fix partial range access bug in unpoisoning/shadow_check * Merge main * Fix check_shadow and implement unit tests * Fix hooking and PC retrieval * WIP: Working gdiplus fuzzing with frida-ASAN, no false positives * LibAFL Frida asan_rt and hook_rt fixes for frida_windows (#2095) * Introduce aarch64 * MacOS fix - MemoryAreas is broken on MacOS and just loops * Introduce working aarch64 ASAN check * Implement large blob * Fix hook_rt for arm64 * Fix poison/unpoison * Fix shadow check * Update x86-64 * Fix aarch64 unused import * Remove extraneous println statement * merge main * Fixes * alloc: add tests, pass the tests * HookRuntime before AsanRuntime, and don't Asan if Hooked * hook_rt: Fixes * Frida windows check shadow fix (#2159) * Fix check_shadow and add additional tests * add some additional documentation * Revert to Interceptor based hooks * fixes * format * Get rid of hook_rt; fixes * clang-format * clang-format * Fix with_threshold * fixes * fix build.rs * fmt * Fix offset to RDI on stack * Fix clippy * Fix build.rs * clippy * hook MapViewOfFile * fmt * fix * clippy * clippy * Missing brace * fix * Clippy * fomrrat * fix i64 cast * clippy exclude * too many lines * Undo merge fails * fmt * move debug print * Fix some frida things * Remove unused frida_to_cs fn for aarch64 * name * Don't touch libafl_qemu --------- Co-authored-by: Dongjia "toka" Zhang <tokazerkje@outlook.com> Co-authored-by: Sharad Khanna <sharad@mineo333.dev> Co-authored-by: Dominik Maier <domenukk@gmail.com> Co-authored-by: Dominik Maier <dmnk@google.com>
68 lines
1.7 KiB
C++
68 lines
1.7 KiB
C++
#include <stddef.h>
|
|
#include <stdint.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
|
|
#include <vector>
|
|
#include <iostream>
|
|
|
|
#include <windows.h>
|
|
#include <gdiplus.h>
|
|
|
|
using namespace std;
|
|
using namespace Gdiplus;
|
|
|
|
GdiplusStartupInput gdiplusStartupInput;
|
|
ULONG_PTR gdiplusToken;
|
|
|
|
// Some DLLs are lazily loaded during image loading
|
|
// FridaInstrumentationHelper doesn't instrument DLLs that are loaded after
|
|
// init, so they're manually loaded here
|
|
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
|
|
switch (fdwReason) {
|
|
case DLL_PROCESS_ATTACH:
|
|
LoadLibraryA("ole32.dll");
|
|
LoadLibraryA("gdi32full.dll");
|
|
LoadLibraryA("WindowsCodecs.dll");
|
|
LoadLibraryA("shcore.dll");
|
|
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
|
|
LoadLibraryA("gdi32.dll");
|
|
// DebugBreak();
|
|
break;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
extern "C" __declspec(dllexport) int LLVMFuzzerTestOneInput(const uint8_t *data,
|
|
size_t size) {
|
|
static DWORD init = 0;
|
|
// if (!init) {
|
|
// init = 1;
|
|
// }
|
|
|
|
HGLOBAL m_hBuffer = ::GlobalAlloc(GMEM_MOVEABLE, size);
|
|
if (m_hBuffer) {
|
|
void *pBuffer = ::GlobalLock(m_hBuffer);
|
|
if (pBuffer) {
|
|
memcpy(pBuffer, data, size);
|
|
// CopyMemory(pBuffer, data, size);
|
|
|
|
IStream *pStream = NULL;
|
|
if (::CreateStreamOnHGlobal(m_hBuffer, FALSE, &pStream) == S_OK) {
|
|
Gdiplus::Bitmap *m_pBitmap = Gdiplus::Bitmap::FromStream(pStream);
|
|
pStream->Release();
|
|
if (m_pBitmap) {
|
|
delete m_pBitmap;
|
|
m_pBitmap = NULL;
|
|
}
|
|
}
|
|
::GlobalUnlock(m_hBuffer);
|
|
}
|
|
::GlobalFree(m_hBuffer);
|
|
m_hBuffer = NULL;
|
|
}
|
|
|
|
// GdiplusShutdown(gdiplusToken);
|
|
return 0;
|
|
}
|