Тогда значит _In_opt_ PULONG DllCharacteristics = 1, если опциональный то либо нуль, либо ссылка на 1 должна быть, нужно подробно глянуть что за параметр. Иначе падение невозможно. --- Сообщение объединено, 24 фев 2025 в 20:38 --- Да, опциональный. Код (Text): lea r8,Message mov dword ptr [r8],160014h mov qword ptr [r8].UNICODE_STRING.Buffer,ptr$(aUser32_) xor rcx,rcx xor rdx,rdx lea r9,Result call LdrLoadDll_ LdrLoadDll(NULL, NULL, @UNICODE_STRING, @ULONG)
Marylin, Попробовать exit вставить, но не должно оно крэшить с нулевым стеком на чистой системе. Если фаулт не может быть доставлен в юзер, процесс киляет ядро по тихому.
ну пробуйте, а у меня нету ни масма, ни времени. конец месяца.. тут свой дедлайн горит, и сейчас не до экситов.. а так да.. ядро должно прибить процесс (мож в стеке чё остаётся).
плохая попытка.. Код (Text): 0:000>g (cfc.d5c): Access violation - code c0000005 (first chance) 00000000`00000000 ?? ??? 0:000> r @rip rip=0000000000000000
Mikl___, Это ведь уже решили: Код (Text): lea r8,Message mov dword ptr [r8],160014h movr qword ptr [r8].UNICODE_STRING.Buffer,aUser32_ xor ecx,ecx lea rdx,Result mov r9,rdx call rax;LdrLoadDll_ LdrLoadDll( _In_opt_ PCWSTR DllPath, _In_opt_ PULONG DllCharacteristics, _In_ PUNICODE_STRING DllName, _Out_ PVOID *DllHandle ); rCx XX00 IN PCWSTR <-- RND! rDx @Result IN OPT PULONG <-- NULL! r8 @Message IN PUNICODE_STRING r9 @Result OUT *PVOID
Установил Win7 x64, tut_01k.exe работает нормально и под Win10, то же нормально Может быть ALIGN:16 не нравится? или секция .code открытая на чтение/запись/исполнение? Или отсутствие секций .data и импорта, либо с загрузчиком что-то не то?
Ahimov, я перечислил возможные причины в #89 и я запускал Код (ASM): mov ecx,1 <--- lea rdx,Result mov r9,rdx call rax;LdrLoadDll а нужно было xor ecx,ecx Размер tut_01k.exe 816 байт, LdrLoadDll, LdrGetProcedureAddressEx и RtlExitUserProcess нахожу по хэшу и распаковываю db "user32.dll",0 → dw "u","s","e","r","3","2",".","d","l","l",0
не знаю, но у меня RIP=0 на входе и сразу падает: Код (Text): 0:000> g (1cf0.117c): Access violation - code c0000005 (first chance) 00000000`00000000 ?? ??? 0:000> r rax=00000000c0000135 rbx=0000000000000076 rcx=0000000000000000 rdx=0000000000400309 rsi=00000000772b9c1e rdi=000000000000070e rip=0000000000000000 rsp=000000000013fef8 rbp=000000000013ff50 r8=0000000000400317 r9=0000000000000000 r10=0000000000000000 r11=000000000013fe72 r12=00000000772b4358 r13=00000000772b6264 r14=00000000771a0000 r15=0000000000000000 iopl=0 nv up ei pl zr na po nc cs=0033 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010246 Может у тебя обновы не установлены или ещё чё.. Более того, если стек не выровнен на 16-байт границу, у меня падает любой софт (который я сам пишу) при вызове апи, а у тебя как-раз RSP=13fef8. Ну кратность размеров секции вроде отрабатывало раньше у меня норм, хотя у тебя стоят 10:10 байт в пе-хидере: Код (Text): 0:000> !dh image00000000`00400000 File Type: EXECUTABLE IMAGE FILE HEADER VALUES 8664 machine (X64) 1 number of sections 67BD0A50 time date stamp Tue Feb 25 05:09:52 2025 0 file pointer to symbol table 0 number of symbols F0 size of optional header 3 characteristics Relocations stripped Executable OPTIONAL HEADER VALUES 20B magic # 14.40 linker version 180 size of code 0 size of initialized data 0 size of uninitialized data 1E0 address of entry point 1C0 base of code ----- new ----- 0000000000400000 image base 10 section alignment <------+-------// 10 file alignment <------+ 2 subsystem (Windows GUI) 6.00 operating system version 0.00 image version 6.00 subsystem version 340 size of image 1C0 size of headers 0 checksum <------------- На эту хрень тоже ругается WinDbg 0000000000100000 size of stack reserve 0000000000001000 size of stack commit 0000000000100000 size of heap reserve 0000000000001000 size of heap commit 8100 DLL characteristics NX compatible Terminal server aware 0 [ 0] address [size] of Export Directory 0 [ 0] address [size] of Import Directory 0 [ 0] address [size] of Resource Directory 0 [ 0] address [size] of Exception Directory 0 [ 0] address [size] of Security Directory 0 [ 0] address [size] of Base Relocation Directory 0 [ 0] address [size] of Debug Directory 0 [ 0] address [size] of Description Directory 0 [ 0] address [size] of Special Directory 0 [ 0] address [size] of Thread Storage Directory 0 [ 0] address [size] of Load Configuration Directory 0 [ 0] address [size] of Bound Import Directory 0 [ 0] address [size] of Import Address Table Directory 0 [ 0] address [size] of Delay Import Directory 0 [ 0] address [size] of COR20 Header Directory 0 [ 0] address [size] of Reserved Directory SECTION HEADER #1 .text name 171 virtual size 1C0 virtual address 180 size of raw data 1C0 file pointer to raw data 0 file pointer to relocation table 0 file pointer to line numbers 0 number of relocations 0 number of line numbers 80000020 flags Code (no align specified) Write Only
Marylin, я сам не ожидал, сколько мелочей придется учитывать при запуске крохотной программы, но всё равно всем принявшим участие огромное спасибо! Если кто-то хочет дорабатывать все листинги прикладывались... так что welcome!
Это FASM?!! Может лучше использовать UASM и его подвиды, либо старый добрый, но туповатый и проприетарный MASM? У меня таких проблем нету, я сначала фасм хотел использовать, ну изучить его, но потом посоветовали UASM, и я понял что фасм мне просто не нужен, UASM может всё то же что и фасм.
Вот я тоже собрал, не трогая пе формат. Зачем принудительно завершать процесс, а не по рет я так и не понял.