lazy_importer
1.0.0
간단하고 사용하기 쉬운 헤더 전용 라이브러리로 리버스 엔지니어의 수명을 훨씬 어렵게 만듭니다.
LI_FN (OutputDebugStringA)( " hello world " );
LI_FN (VirtualProtect).in(LI_MODULE( " kernel32.dll " ).cached());첫 번째 줄을 컴파일 할 때 IDA 출력
LI_FN(function_pointer) -> lazy_functionLI_FN_DEF(function_type) -> lazy_functionLI_MODULE(module_name) -> lazy_modulesafe 함수가 성공적으로 완료 할 수 없을 때 정의되지 않은 동작 대신 0이 반환됨을 나타냅니다.cached 결과가 첫 번째 호출 중에 만 계산되고 나중에 재사용됨을 나타냅니다.forwarded 것은 내보내기 전달이 올바르게 해결 될 것임을 나타냅니다. lazy_module| 기능 | 안전한 | 캐시 | |
|---|---|---|---|
| 주어진 모듈을 찾고 주소를 반환하려고 시도합니다. | |||
get<T = void*>() -> T | |||
safe<T = void*>() -> T | ✅ | ||
cached<T = void*>() -> T | ✅ | ||
safe_cached<T = void*>() -> T | ✅ | ✅ | |
| 주어진 ldr_data_table_entry pointer를 사용하여 주어진 모듈을 찾는 Attemps | |||
in<T = void*, Ldr>(Ldr ldr_entry) -> T | ✅ | ||
in_cached<T = void*, Ldr>(Ldr ldr_entry) -> T | ✅ | ✅ | |
lazy_function<F>| 기능 | 안전한 | 캐시 | 전달 |
|---|---|---|---|
| 주어진 인수를 사용하여 호출을 해결했습니다 | |||
operator()(...) -> result_of<F, ...> | |||
| 모든로드 된 모듈에서 내보내기를 해결하고 기능 주소를 반환하려고 시도합니다. | |||
get<T = F>() -> T | |||
safe<T = F>() -> T | ✅ | ||
cached<T = F>() -> T | ✅ | ||
safe_cached<T = F>() -> T | ✅ | ✅ | |
forwarded<T = F>() -> T | ✅ | ||
forwarded_safe<T = F>() -> T | ✅ | ✅ | |
forwarded_cached<T = F>() -> T | ✅ | ✅ | |
forwarded_safe_cached<T = F>() -> T | ✅ | ✅ | ✅ |
| 주어진 모듈에서 내보내기를 해결하고 기능 주소를 반환합니다. | |||
in<T = F, A>(A module_address) -> T | |||
in_safe<T = F, A>(A module_address) -> T | ✅ | ||
in_cached<T = F, A>(A module_address) -> T | ✅ | ||
in_safe_cached<T = F, A>(A module_address) -> T | ✅ | ✅ | |
ntdll 에서 내보내기를 해결하고 함수 주소를 반환하려고 시도합니다. | |||
nt<T = F>() -> T | |||
nt_safe<T = F>() -> T | ✅ | ||
nt_cached<T = F>() -> T | ✅ | ||
nt_safe_cached<T = F>() -> T | ✅ | ✅ | |
#define | 효과 |
|---|---|
LAZY_IMPORTER_NO_FORCEINLINE | 힘을 불완전합니다 |
LAZY_IMPORTER_CASE_INSENSITIVE | 사례 무감각 한 비교를 가능하게합니다. 전달 된 수출 해결에 필요할 수 있습니다. |
LAZY_IMPORTER_CACHE_OPERATOR_PARENS | lazy_function의 operator() 에서 get() 대신 cached() )를 사용합니다 |
LAZY_IMPORTER_RESOLVE_FORWARDED_EXPORTS | get() 에서 forwarded() 사용합니다. 경고는 nt() 와 in() 에 적용되지 않습니다. |
LAZY_IMPORTER_HARDENED_MODULE_CHECKS | 모듈 열거에 추가적인 정신 검사를 추가합니다. |
LAZY_IMPORTER_NO_CPP_FORWARD | <utility> C ++ 헤더에 대한 의존성을 제거합니다. |
for ( i = * ( _QWORD * * )( * ( _QWORD * )( __readgsqword ( 0x60u ) + 24 ) + 16 i64 ); ; i = ( _QWORD * ) * i )
{
v1 = i [ 6 ];
v2 = * ( unsigned int * )( * ( signed int * )( v1 + 60 ) + v1 + 136 );
v3 = ( _DWORD * )( v2 + v1 );
if ( v2 + v1 != v1 )
{
LODWORD ( v4 ) = v3 [ 6 ];
if ( ( _DWORD ) v4 )
break ;
}
LABEL_8:
;
}
while ( 1 )
{
v4 = ( unsigned int )( v4 - 1 );
v5 = -2128831035 ;
v6 = ( char * )( v1 + * ( unsigned int * )(( unsigned int ) v3 [ 8 ] + 4 * v4 + v1 ));
v7 = * v6 ;
v8 = ( signed __int64 )( v6 + 1 );
if ( v7 )
{
do
{
++ v8 ;
v5 = 16777619 * ( v5 ^ v7 );
v7 = * ( _BYTE * )( v8 - 1 );
}
while ( v7 );
if ( v5 == -973690651 )
break ;
}
if ( !( _DWORD ) v4 )
goto LABEL_8;
}
(( void (__fastcall * )( const char * ))( v1
+ * ( unsigned int * )( v1
+ ( unsigned int ) v3 [ 7 ]
+ 4 i64 * * ( unsigned __int16 * )( v1 + ( unsigned int ) v3 [ 9 ] + 2 * v4 ))))( "hello world" );저에게 연락을 취해 저와 제 프로젝트를 지원하기 위해 돈을 기부 한 사람들에게 감사하고 싶습니다.