![]() |
eXeL@B —› Оффтоп —› Plugin/ScriptIDA&etc... |
Посл.ответ | Сообщение |
|
Создано: 11 января 2008 03:56 · Личное сообщение · #1 Вот решил создать тему %) появилось немного времени.. Писать че-нить здесь буду, мож кому пригодиццо Мож кто истЕну для себя найдет А мож на свете парочка писсдатых кодеров появиццо И так основной контекст – это обсуждение IDA и все что с ней связано(косвенно заденем все что шевелиццо и движеццо); скрипты, плагины, etc.. вернее о их написании и зачем это нужно IDA - это второй инструмент для реверсера и каждый обязан(!) знать немного больше, чем знает на данный момент Разговаривать будем на ASM(MASM&FASM дополняющий)/C++(VS основной) ЯП(Язык Программирования) Ну и в качестве примеров жертвы как всегда будут "протекторы" Начну с вопроса к ахрененнным спецам по С++ С++ с бинарной системой счисления работает, скромно говоря вообще ужснахникак Копипаст кода из PSDK IDA(кстати хорошо придуман этот код - показывает сущность беспомощности С++, вернее вот этих шаблонов и классов; типа чем больше ты напишешь скобочек, крючечков и запятых, тем круче будешь, ведь твой исходник больше чем у других и в нем пиздастее мусор) // rotate left #ifdef __cplusplus template<class T> T qrotl(T value, size_t count) { const size_t nbits = sizeof(T) * 8; count %= nbits; T high = value >> (nbits - count); value <<= count; value |= high; return value; } // rotate right template<class T> T qrotr(T value, size_t count) { const size_t nbits = sizeof(T) * 8; count %= nbits; T low = value << (nbits - count); value >>= count; value |= low; return value; } #endif Так на С++ выглядят ror и rol по мнению Ильфака Собственно вопрос можно ли покороче и покрасившэ (естественно без асм вставок, чич-то на С++(этож типа самый кошерный ЯП%) )) А так выглядит этот код в Оле Дебаговне(вид этого кода зависит от выставленных галочек(опций) компилятора) ЖЕСТЬ /* qrotl - rol */ 0040101A AND DWORD PTR SS:[ESP+8],1F 0040101F MOV EDX,DWORD PTR SS:[ESP+4] 00401023 PUSH 20 00401025 POP ECX 00401026 SUB ECX,DWORD PTR SS:[ESP+8] 0040102A MOV EAX,EDX 0040102C SAR EAX,CL 0040102E MOV ECX,DWORD PTR SS:[ESP+8] 00401032 SHL EDX,CL 00401034 OR EAX,EDX 00401036 RETN 8 /* qrotr- ror */ 00401039 AND DWORD PTR SS:[ESP+8],1F 0040103E MOV EDX,DWORD PTR SS:[ESP+4] 00401042 PUSH 20 00401044 POP ECX 00401045 SUB ECX,DWORD PTR SS:[ESP+8] 00401049 MOV EAX,EDX 0040104B SHL EAX,CL 0040104D MOV ECX,DWORD PTR SS:[ESP+8] 00401051 SAR EDX,CL 00401053 OR EAX,EDX 00401055 RETN 8 P. S. плз. пишите гламурно и интересно !!!посты с двумя словами не приветствуюццо!!! если вдруг кто-то захочет посраццо (ну посты типа ты не асилишь) плз. создайте другую тему в этом подфоруме для обсуждения, если будет время и желание я всегда готов почмырить кого-нить… кстати священных войн, какой ЯВУ пиздастее другого – тоже не надо, но реальные фактЫ для обоснования мнения почему надодумать так, а не по-другому !!!всегда приветствуюццо!!! если у кого-нить есть свои наработки по сабжу(скрипты, плагины(ссылки или аттачи приветствуюццо)) – не стесняемся и выкладываем здесь для обсуждения ... По-возможности, старайтесь не мусорить в топике (плз.) ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 12 января 2008 06:17 · Личное сообщение · #2 И так продолжим... (проект будет большой(!) дайте нам силы и истЕны асилить) Сегодня обозначим единый стандарт, по которому будем вступать и компилировать %) [comment]это нужно чтобы общество не ссало мимотазика[/comment] Пока это простой пример, чтобы понять суть происходящего и обратить внимание на новые(о ужснах) возможности в SDK IDA Что НАМ для этого нужно !!!обязательно!!! 1. DDK версия принципиального значения не имеет, (но как всегда)но... (по умолчанию будет 3790) 2. само PSDK IDA Если кто качал IDA с этого сайта, то рекомендую в обязательном порядке слить вот этот архив http://rapidshare.com/files/73981602/DataRescue.IDA.Pro.Advanced.v5.2. SDK-YAG.rar (3,98 MB) [comment]это не ссылка на варез! – эти файлы просто(необходимы) нужны для написания плагинов для IDA[/comment] 3. Microsoft Platform SDK for Windows XP SP2 4. Warning [Этот вариант компиляции выбран не случайно] Те кто на танке давно, могут позволить себе танцевать с бубном;) как им нравиццо(принципиального значения это не имеет) Для любителей "ООП" в обязательном порядке читать "статью" northdemon (ну и расплодилось же этих демонов%) ) http://exelab.ru/art/action=view&id=431 На данный момент я опешу только сущность файлов управляющих компиляцией (внутренности основного проекта потом по мере необходимости) Компилировать будем пример из SDK ИДЫ (yagidps\plugins\subwindow) По этой ссылке кому нужно может скачать все необходимые файлы Надо только будет пути к директориям DDK/SDK свои прописать;) http://demonteam.narod.ru/download/example.rar (34KB) Содержимое архива make.bat makefile sources subwindow.cpp subwindow.def и из SDK ИДЫ libvc.w32\ida.lib Первый файл как завещал великий ахтунг Microsoft(должен быть всегда и везде) короче мусор, но надо %) makefile # ////////////////////////////////////////////////////////////////////// /////// # # DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source # file to this component. This file merely indirects to the real make file # that is shared by all the driver components of the Windows NT DDK # !INCLUDE $(NTMAKEENV)\makefile.def # ////////////////////////////////////////////////////////////////////// /////// второй файл этот файл нужен, при запуске которого МЫ вступаем и компилируем make.bat rem ////////////////////////////////////////////////////////////////////// /////// rem C:\WINDDK\3790 – соответственно директория и версия DDK ваши rem C:\CODE\IDA\subwindow – директория в которой лежат файлы предназначенные для компиляции %SystemRoot%\system32\cmd.exe /c "cd C:\WINDDK\3790\bin\&&setenv.bat C:\WINDDK\3790 free W2K &&cd C:\CODE\IDA\subwindow&&build -ecZ" rem эти две строчки нужны для удаления срача оставленного компилятором rem но если ВЫ в первый раз, то лучше закомментите их от греха подальше RMDIR /s /q C:\CODE\IDA\subwindow\objfre_w2K_x86 DEL /s /q C:\CODE\IDA\subwindow\buildfre_w2K_x86.log rem копипастим в директорию с плагинами для ИДЫ и меняем расширение файла subwindow.dll на *.plw и все, плагин готов XCOPY C:\CODE\IDA\subwindow\i386\subwindow.dll C:\Progra~1\IDA\plugins\subwindow.plw /Y pause rem ////////////////////////////////////////////////////////////////////// /////// [comment]после того как появиццо консолька, щелкните на заголовке окна ПКМ и выберете в появившемся контекстном меню, пункт свойства и настройте в появившемся диалоге это окно как вам хочеццо и будет удобнее[/comment] третий файл основной и самый нужный sources # ////////////////////////////////////////////////////////////////////// /////// #подробное описание всего этого есть в SDK/DDK# # ////////////////////////////////////////////////////////////////////// /////// # имя файла, получаемое на выходе(имя файла с расширением *.def должен быть идентично этому имени!) # TARGETNAME=subwindow # символ "." указывает на текущую директорию где появиццо папка i386 и скомпилированный файл(subwindow.dll) в ней # TARGETPATH=. # на выходе должен быть *.dll(DYNLINK - указывает компилятору скомпилировать *.dll) # TARGETTYPE=DYNLINK INCLUDES=C:\CODE\IDA\SDK\include; C:\WINDDK\Microsoft Platform SDK for Windows XP SP2\Include TARGETLIBS=C:\CODE\IDA\SDK\libvc.w32\ida.lib $(SDK_LIB_PATH)\user32.lib # это опции передаваемые компилятору чтобы на выходе получить файл "без мусора и не только" # X86_CPU_OPTIMIZATION=/Oxsg USE_MSVCRT=1 USE_NATIVE_EH=1 # нужно для IDA # C_DEFINES=-D__NT__ -D__IDP__ # исходники которые должны быть скомпелированы # SOURCES=subwindow.cpp # все это пока по минимуму # # ////////////////////////////////////////////////////////////////////// /////// четвертый файл тоже нужен "для коррекции имен экспортируемых данных", но тоже мусор – короче чтобы компиль тупо не тупил %) пока в нем всего буржуйских два слова subwindow.def EXPORTS PLUGIN Для экспериментов с плагином нужно отдизасмить простенький файлик типа с кодом в несколько строчек и им пользоваццо потому как ИДА не подгружает плагины, если не открыть че-нить в ней !!!ВНИМАНИЕ - никогда не открывайте в ИДЕ важных для вас файлов, из-за маленькой ошибки в плагине вы можете убить базу ИДЫ безвозвратно!!! самый быстрый путь к отладке в олечке в случае, когда потребуеццо найти багу в плагине: запускаем ИДУ, открываем в ней тестовый файлик и аттачимся к процессу ИДЫ олькой олечка может ругаццо все зависит от ее настроек(обычно в появляющихся месаджах тупо жмем OK, но если их будет слишком много потанцуйте с настройками олечки) приаттачились? Жмем F9 и вызываем Memory map(Alt+M), ищем там наш плагин и переходим оттуда на наш код плагина, далее по обстоятельствам еще может возникнуть ситуация когда ИДА будет падать не успев запустиццо из-за плагина, но мне лениво описывать такие варианты, будем считать что мы код пишем всегда правильно и отладка нам не нужна %)) и так запускаем make.bat видим что все ОК, запускаем ИДУ, открываем в ней тестовый файлик и лезем по меню до.. (Edit->Plugins->Create IDA subwindow) результат всего этого вас улыбнет, но это будет в качестве домашнего задания, чич-то поржать %) [comment] весь этот ананизм Ильфака вызван из-за юзанья ООП борланда, если бы писал GUI на чистом API, было бы куда проще и не нужны были бы эти убогие функи в SDK для создания своих окон достаточно было бы сделать структуру, заполнить ее хендлами фейса и передать ее через PDK инициализации как это сделано в WinAsm [/comment] ВЫ еще не скомпилировали? – тогда МЫ идем к вам© P. S. Ну вот МЫ немного(совсем чуть-чуть) приблизились к опенсорсному плагину, функционал которого пока приватный... И с нуля будем шариДь в(о ужснах) C++ Те, КТО не научиццо вступать и компилировать, заюзать плагин не смогут;) ЗЫ: могу где-нить ошибиццо, сильно не проверял, но камни в огород по этому поводу приветствуеццо! ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 12 января 2008 12:29 · Личное сообщение · #3 |
|
Создано: 12 января 2008 14:59 · Поправил: cppasm · Личное сообщение · #4 Не катит. Для знаковых типов ROR будет работать неправильно. [-=Добавлено=-] Вот набросал проверочный код, какой результат правильный смотри сам... #include<stdio.h> #define ROL(X,N) (((X)<<(N))|((X)>>(8*sizeof(X)-(N)))) #define ROR(X,N) (((X)>>(N))|((X)<<(8*sizeof(X)-(N)))) int __declspec(naked) ror(int var,int num) { __asm{ push ebp mov ebp,esp mov eax,var mov ecx,num ror eax,cl pop ebp ret } } void main(void) { int x=0x80000000; printf("ASM_FN=%08X -> MACRO=%08X\n",ror(x,1),ROR(x,1)); } Поимели: ASM_FN=40000000 -> MACRO=C0000000 В макросе надо первый аргумент к беззнаковому типу приводить, например к unsigned int. #define ROL(X,N) ((((unsigned)X)<<(N))|(((unsigned)X)>>(8*sizeof(X)-(N)))) #define ROR(X,N) ((((unsigned)X)>>(N))|(((unsigned)X)<<(8*sizeof(X)-(N)))) ![]() |
|
Создано: 13 января 2008 04:23 · Личное сообщение · #5 __ пишет: #define ROL(X,N) (((X)<<(N))|((X)>>(8*sizeof(X)-(N)))) #define ROR(X,N) (((X)>>(N))|((X)<<(8*sizeof(X)-(N)))) При перемене мест скобочек, крючечков и запятых - код практически не меняеццо;) И твои макро в нашем случае не решают поставленную задачу, при использовании таких ключей оптимизации кода(/Oxs) хз. Может ему какой спец.ключик нужен чтобы компиль понимал твой код и сгенерил этот злащастный ror или rol [postfix]Просьба в топике не придераццо конкретно к словам/ошибкам в словах(к коду естественно надо(красивый код всегда приветствуеццо)), важно понять суть обсуждения[/postfix] Компилятор генерит вот такой код: (с оптимизацией) ////////////////////////////////////////////////////////////// #define ROR(X,N) (((X)>>(N))|((X)<<(8*sizeof(X)-(N)))) extern "C" VOID Start() { char buf[256]; int x=0x80000000; wsprintfA((LPSTR)buf,"MACRO=%08X\n",ROR(x,1)); } 00401014 SUB ESP,100 0040101A PUSH C0000000 0040101F LEA EAX,DWORD PTR SS:[ESP+4] 00401023 PUSH 00401008 ; ASCII "MACRO=%08X" 00401028 PUSH EAX 00401029 CALL DWORD PTR DS:[<&USER32.wsprintfA>] ; USER32.wsprintfA 0040102F ADD ESP,10C 00401035 RETN ////////////////////////////////////////////////////////////// Но даже если мы уберем оптимизацию, то получим: ////////////////////////////////////////////////////////////// 00401020 PUSH EBP 00401021 MOV EBP,ESP 00401023 SUB ESP,108 00401029 MOV DWORD PTR SS:[EBP-4],80000000 00401030 MOV EAX,DWORD PTR SS:[EBP-4] 00401033 SAR EAX,1 00401035 MOV ECX,DWORD PTR SS:[EBP-4] 00401038 SHL ECX,1F 0040103B OR EAX,ECX 0040103D PUSH EAX 0040103E PUSH 00401008 ; ASCII "MACRO=%08X" 00401043 LEA EDX,DWORD PTR SS:[EBP-108] 00401049 PUSH EDX 0040104A CALL DWORD PTR DS:[<&USER32.wsprintfA>] ; USER32.wsprintfA 00401050 ADD ESP,0C 00401053 MOV ESP,EBP 00401055 POP EBP 00401056 RETN ////////////////////////////////////////////////////////////// Вопрос нес в себе чич-то показательный характер немощности синтаксиса C++ и потребности обязательного присутствия в исходнике ASM кода! Задача в том, что надо при помощи синтаксиса C++ заставить сгенерировать псевдокоманду ASM`а ror или rol, а не кучу мусора эмулирующего ror или rol как это видно из примеров Вот для примера крючок ^ сгенерит xor, | сгенерит or, & сгенерит and... etc – а вот ror или rol чет мля никак, нужен крючок какой-нить %) Ну-да ладно(надодумать вопрос сам себя исчерпал), видать как обычно, когда че-нить потребуеццо, в этом C++ нет, все через жопу делаеццо(главное чтоб в исходнике побольше скобочек нарисовано было(ужснах)) [comment]А вообще в споре (если это не флейм) практически всегда рождаецца истЕна! [/comment] это и есть один из вариантов, по причине которого нужен именно такой вариант компилирования... забегая чуть в перед - мы имеем возможность, не отходя от кассы компилить MASM32 сырки практически в полном объеме и подключать этот код статистически (это немного будет похоже на то, как это делает делфи, но возможности гораздо шире) кстати это один из приоритетов MASM`a перед FASM`ом Вот тут те, кто уже начал учиццо вступать и компилировать обязательное чтиво(как убивали препода%)) ) forum.sources.ru/showtopic=208941 [offtop]мля, скокаж я сегодня выпил.. ппц[/offtop] ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 13 января 2008 14:33 · Личное сообщение · #6 Demon666 пишет: Может ему какой спец.ключик нужен чтобы компиль понимал твой код и сгенерил этот злащастный ror или rol используйте icc и будет вам ror и rol ;) cl считает что его код быстрее для большинства процессоров чем ror и rol cppasm пишет: В макросе надо первый аргумент к беззнаковому типу приводить или знать особенности применения этих макросов, мне не требовался ror и rol для знаковых типов ![]() |
|
Создано: 13 января 2008 14:43 · Поправил: overwriter · Личное сообщение · #7 |
|
Создано: 14 января 2008 08:41 · Личное сообщение · #8 __ пишет: или знать особенности применения этих макросов, мне не требовался ror и rol для знаковых типов Не думаю, что это он тебе предъявлял, просто красиво дополнил кодом, чтобы у новичков не возникало проблем с типами ;) overwriter Вообще тема должна быть у новичков, но я когда сделали оффтоп, создавал темы всегда здесь хз. Тут если так по честному, то прошу прощения у тех, кто писал в личку и я не ответил(время мля) кто-то предъявлял что у него ранг маленький и он не может постить(что тут можно сказать: - 20 набрать здесь на cracklab`е (но и писали с довольно большим рангом, даже больше чем у меня), это не такая уж и проблема(да и не хотелось бы чтобы плодилось клоны, да и модераторам забот меньше, а то забанят мну)) [comment] вообще с приходом Archer стопудофф контекст сайта станет чище от флейма, но верните нам самого злого модератора Лордика!(он "в двух словах" всегда мог написать истЕну) [/comment] кто-то писал, что из-за оффтопа не увидел сразу тему(я лично не хочу, чтобы мозолила глаза тема просто так кому это не интересно, да и кто ищет и кому надо - тот всегда найдет©) да и вообще cracklab – это же не панель где ноги раздвинул и тебе всЁ дают(если каждому давать поломаеццо кровать© Рем(если че, это написано было не в мой адрес)) в личке просило поделиццо наработками и инфой уже больше десяти человек(ИМХО – это уже в обязательном порядке должна создаццо тема) да и вообще тема создавалась в надежде, что прейдут сюда новые кодеры(ты же лично должен понимать что это только плюс) и те, кто действительно хочет стать спецом в этом деле тема отдельная, потому что здесь пишеццо плагин имеющий свой функционал(я немного описывал его возможности в дебатах с КК на васме) это "некий свой" скриптовый движок, который позволит добавить любой свой функционал и использовать возможности SDK ИДЫ и заюзать все это без проблем легко и просто(примеров кому это надо море) но это даже не основная причина создания топика – суть немного в другом вот на форумах постоянно создаюццо темы с просьбами помочь решить проблему и начинают жевать то, что пережевано давно несколько лет назад, при этом тратят на это время, но вот можно будет использовать это время с пользой для общества, в любой момент взять и дополнить лично функционал этого плагина как это сделать я постепенно постараюсь подробно описать многие могут и у кого-то уже есть определенные полезные функи, но GUI для них нет, вот и смогут их добавить в скриптовый движок для юзанья этого полезного кода в ИДЕ опенсорсный проект – это хорошо, но должен быть хоть кокой-то сапппорт, иначе проект заглохнет - ИМХО я бы мог в качестве примера выложить применение этого движка на файле запротекченом VMprotect, но файло приватное и просили его не светить на паблике(сразу бы вопросы отпали зачем это нужно) но если тема не нравиццо, пишите (достаточно трех челов кто протЕв), мну ее закроет... По-крайней мере ко мне вопросов потом больше не будет, почему так произошло! некоторые новички задают себе вопрос с чего начать кодить, тут с грубым сарказмом будут примеры, обосновывающие приоритеты компиляторов с их плохой стороны, а не пиар дерьма ООП, которое несет в себе миру только ЗЛО и плодит лентяев, которые не на что не способны кроме копипаста Аминь! ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 14 января 2008 12:25 · Личное сообщение · #9 Demon666 пишет: я бы мог в качестве примера выложить применение этого движка на файле запротекченом VMprotect, но файло приватное и просили его не светить на паблике(сразу бы вопросы отпали зачем это нужно) т.е. проблема в собсно файле под вмпротом? но ведь можно взять для примера другой файл - также запротекченный вмпротом. или проблема в другом и это лишь отговорка? Demon666 пишет: опенсорсный проект – это хорошо, но должен быть хоть кокой-то сапппорт, иначе проект заглохнет - ИМХО верно. +1 вот это стоило бы выделить болдом, т.к. суть теряется в столь пространном посте: Demon666 пишет: это "некий свой" скриптовый движок, который позволит добавить любой свой функционал и использовать возможности SDK ИДЫ и заюзать все это без проблем легко и просто (примеров кому это надо море) . /конец цитаты а как двиг будет подстраиваться под изменения сдк? и вообще как это будет реализовано технически? ----- EnJoy! ![]() |
|
Создано: 14 января 2008 16:20 · Поправил: cppasm · Личное сообщение · #10 Demon666 ООП тоже не люблю, но на чистый Си ты зря наезжаеш. Насчёт ROR/ROL - странная постановка задачи. Создадим себе проблемы а потом будем их решать ![]() Кто мешает написать вставку на ассемблере? #include<stdio.h> unsigned __declspec(naked) __fastcall rol(unsigned num, char bit) { _asm{ mov eax,ecx mov cl,dl rol eax,cl ret } } unsigned __declspec(naked) __fastcall ror(unsigned num, char bit) { _asm{ mov eax,ecx mov cl,dl ror eax,cl ret } } void main(void) { printf("rol(3,1)=%08X, ror(3,1)=%08X\n",rol(3,1),ror(3,1)); } Насчёт скриптового движка что-то ничего не ясно. Сути не видно, не понятно как посты в кучу собрать. Как вопрос насчёт ROR/ROL связан с плагином и IDA SDK? Единственное что понял - тут собираются вступать и компелировать ![]() Остальное всё в тумане... Напиши кратко идею, а то много букв - суть размазана. ![]() |
|
Создано: 14 января 2008 19:24 · Личное сообщение · #11 cppasm пишет: но на чистый Си ты зря наезжаеш. Нет тут ты мимотазика, я даже добавлю что лучше кодить на С++, но не юзать зомбированно классы, шаблоны, etc cppasm пишет: Создадим себе проблемы а потом будем их решать Это Microsoft создали проблемы с этими типами, а теперь не могут вылезти из этой помойной ямы, пусть лучше поучаццо у создателей движка PHP и их синтаксис Больше гига кода, а мля нормальный редактор сделать не могут, открываешь их IDE и блевать хочеццо - ИМХО cppasm пишет: Кто мешает написать вставку на ассемблере? Гы, ну я ж писал уже, что этот пример для того, что нам без ASM`а никуда Ты наверное встречал вопросы на форумах от новичков -> с чего начать изучение ASM или C++, MASM или FASM, ну вот им и ответ (пусть чешут мосх) Jupiter пишет: т.е. проблема в собсно файле под вмпротом? но ведь можно взять для примера другой файл - также запротекченный вмпротом. или проблема в другом и это лишь отговорка? Да проблем собственно нет.. Отец Дерматолог правила знает, мож порадует нас малоимущих, да запротектит файлик последней версией прота ;)(короче там, где шифруеццо таблица указателей на исполнители байт кода) Jupiter пишет: а как двиг будет подстраиваться под изменения сдк? и вообще как это будет реализовано технически? cppasm пишет: Напиши кратко идею, а то много букв - суть размазана. Да все банально просто и ничего нового в этом нет(чет с этими праздниками до исходников добраццо не могу%) ) Вот примерно так вкратце так мы регистрируем новую свою функу FindBinary для скрипта lua_register(L,"FindBinary",FindBinary); а так выглядит сама функа на С++, в ней функа CompareSignature написана на MASM`е и находиццо в сорсе *.asm, но компилит все это дело VS(DDK) int FindBinary(lua_State *L) { ULONG status=-1; ea_t Start; ea_t End; ea_t Temp; Start=(ea_t)lua_tonumber(L,-3); // так мы читаем из скрипта параметры передаваемые функции End=(ea_t)lua_tonumber(L,-2); if(Start<End) { const char* szSignature = lua_tostring(L,-1); ULONG TempMemory=(ULONG)GlobalAlloc(GMEM_ZEROINIT,End-Start); get_many_bytes((ea_t)Start,(HGLOBAL)TempMemory,End-Start); if(-1==(Temp=(ea_t)CompareSignature(TempMemory,(TempMemory)+(End-Sta rt),(LPSTR)szSignature))) Start=-1; else Start+=Temp; GlobalFree((HGLOBAL)TempMemory); status=Start; } lua_pushnumber(L,status); // а так возвращаем в скрипт резултат return 1; } В скрипте надо будет написать Signature="EB0?EB6A??EB01EB54EB01EB6A40" addressStart =SegStart(-1); address=FindBinary(addressStart, SegEnd(-1), Signature); SegStart и SegEnd – это тоже такие же функи как FindBinary в скрипте или так address=FindBinary(0x00401000, 0x00402000, "EB0?EB6A??EB01EB54EB01EB6A40"); тут функа FindBinary имеет максимально расширенный формат поиска, просто для примера так примитивно написано Теперь по работе с SDK Допустим нам нужно вызвать msg (скромно для примера) Регистрируем lua_register(L,"msg",print_msg); и вот сам код на С++, вызова функи из SDK ИДЫ msg, но тут немного расширенный функционал, то есть как бы примитивное авто определение типа идет, что вывести в консольное окно ИДЫ строку или число, некое подобие синтаксиса PHP где тип не обязательно указывать(все это пока примитивно чич-то для понимания сути) int print_msg(lua_State *L) { if(3==lua_type(L,-1)) { ULONG hex=(ULONG)lua_tonumber(L,-1); msg("%08X\n",hex); } else { const char* Message = lua_tostring(L,-1); msg("%s\n",Message); } return 0; } В скрипте надо будет написать msg("Script"); или msg(0x4072B4); Надо будет зарегать потом нужные функи SDK в движке и обработать их своим кодом для удобства работы с интерфейсом ИДЫ Для примера ИДА не смогла оформить красиво данные в проге(даже добавлю что эти данные пошифрованы), при помощи скрипта мы вызываем из SDK функу do_data_ex с определенными параметрами и все данные превращаюццо в DWORD`ы(ну естественно расшифровываем их заодно) int MakeData(lua_State *L) // только часть кода функи ... case TYPE_DWORD: { int $temp=$length/4; do_unknown_range(ea,$temp*4,true); if(0==$temp) { do_data_ex(ea,0x20000000L/*FF_DWRD*/,4,BADNODE); } else { for(;$temp!=0;--$temp) { do_data_ex(ea,0x20000000L/*FF_DWRD*/,4,BADNODE); ea+=4; } } } break; кто-то может сказать, что есть подобное в стандартных скриптах - не отрицаю, но это медленно и примитивно сделано и некоторые задачи не реально выполнить стандартными скриптами да и вообще я лично не могу уступить соблазну контролировать весь процесс лично и в любой момент расширить функционал, а не ждать подачки от Ильфака почему собственно свой движок – да потому что планирую переделать синтаксис движка LUA(сделать как в PHP, проект-то опенсорсный), а то синтаксис там сильно убогий - ИМХО надо мозги собрать в кучу после этих пьянок, короче на днях выложу первые сырки(пока шаблон и GUI будет(без движка)) вообщем примерно как-то так... Jupiter Слушай, а вот встречный вопрос – это не ты случайно в проекте WinAsm с Шуриком русский форум координируешь? (вернее в команде с Antonis Kyprianou?) ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 14 января 2008 22:35 · Личное сообщение · #12 Demon666 нормально расписал, понятно. задумка хорошая. через скрипт делать - эт прально. cppasm пишет: надо мозги собрать в кучу после этих пьянок ээт точно ;) терь ещё и дни рождения пошли... ээх Demon666 пишет: Слушай, а вот встречный вопрос – это не ты случайно в проекте WinAsm с Шуриком русский форум координируешь? (вернее в команде с Antonis Kyprianou?) ну я ;) я там заведую разделом проектов в т.ч., можешь глянуть - там есть интересные штуки на асме. я там выкладывал менеджер процессов EzProcess, маленький и шустрый. могёт оптимизировать память процесса через вызов SetProcessWorkingSetSize кстати, WinAsm оч. удобная среда разработки. сейчас антонис разрабатывает новый контрол - HiEdit, тож можешь глянуть. ----- EnJoy! ![]() |
|
Создано: 15 января 2008 08:06 · Личное сообщение · #13 Так, если что, чтобы далеко от темы не убегать, пока тут решил инфу запостить о скриптовом движке LUA Вкратце: очень маленький движок, мобильный, везде, где потребуеццо можно без проблем заюзать Вдруг кому-то нужно для своих проектов будет, БАЯН, но всеже...(чуток хелпер все-таки почитать нужно) Ссылка на оффсайт(проект опенсорсный) www.lua.org А здесь версия справочника на русском www.lua.ru и вот здесь немного с примерами ilovelua.narod.ru этого надодумать, достаточно будет Jupiter пишет: ну я ;) ну, что тут можно сказать... большой пасиба за ваше время, потраченное на реализацию и поддержку проекта за своевременную помощь начинающим учиццо вступать и компилировать скокаж я уже километров ASM кода реализовал в IDE WinAsm жаль что в книгах типа Пирагова и т. д. не пиарят ваш проект WinAsm (а описывают ужснах DOS и среду tasm для WIN32%) ) здесь насколько я знаю много кто юзает WinAsm, так что можно смело считать, что историю ваша команда делает с великой пользой для общества кодеров Jupiter вот тут ради такого дела порылся сейчас в ящике и нашел плагин... чтоб тему новую не плодить здесь спрошу авось проблемка решиццо когда-то, давно еще в начале того года, дали проект полностью на ASM`е(около 2MB) так вот сам понимаешь файлов много, ну и заодно констант, структур, функций... проект не я писал, а че где и в каком файле находиццо, ну заипешся искать и запоминать поиск в WinAsm стандартный и из-за этого не очень удобный, времени мало, а реализовать поставленную задачу надо быстро ну, вот на коленках по быстрому и решил накатать этот плагин основное что мне надо было, я сделал, но на половину, так как в IDE непонятные мне досихпор ограничения оказались(я потом когда проект сделал, еще несколько раз пытался найти причину такой бажности, но так и неасилил. Мож щаз попробуем вдвоем с этим разобраццо?) а именно: первое на чем влетел – это когда делаешь поиск слова/фразы по всем файлам в проекте такая бага есть, что развернутые окна MDI начинают сворачиваццо и становятся маленькими(ну неудобно ппц) я порылся в файле WinAsm`а и нашел в чем причина: .text:004081A1 6A 00 push 0 ; lParam .text:004081A3 57 push edi ; wParam .text:004081A4 68 23 02 00 00 push WM_MDIRESTORE ; Msg .text:004081A9 FF 35 25 75 45 00 push dword_457525 ; hWnd .text:004081AF E8 F0 B2 02 00 call SendMessageA Адреса и код из версии 5.1.5.0 Я занопил этот участок кода, вроде скока юзаю траблов не было после патча хз. Пользы от этого кода вроде никакой, а вот дискофорт есть да и патчить каждый раз новую версию чет лениво, остановился пока на 5.1.5.0 второе неудобство возникло, когда я захотел осуществить реализацию идеи когда поиск находит слово, он должен выровнять по центру редактора кода(CodeHiC) найденное слово, я сделал вроде все OK, но вот если потянуть за Splitter bar и раздвоить окно редактора кода на два, то уже не катит, получаеццо что найденное слово вообще может на экране не появиццо как я там только не танцевал с бубном, даже пытался размеры контрола через GetDC(контекст) узнать, бесполезно. Тут думаю решение проблемы одно в структуре CHILDDATA возвращать два хендла hEditor первого и второго. Может там где его можно получить(?), чет полазил по PSDK, так и не нашел как это сделать. Я конечно понимаю что это мелочи, но мож я че не увидел и это уже есть? Третья это вообще ппц Я добавляю свой TAB(Search) на панель где Project|Blocks|Resources|Search(рядом с ними) (я там еще свой ToolBar добавляю с кнопкой для удобства и пункт меню(Add-Ins->Go to folder...) для перехода к нужному файлу в папку) Смысл этой панели такой – мы вбиваем искомое слово в ComboBox_edit и нажимаем поиск Плагин ищет слово во всем проекте и выводит на панель ссылки, на строки в файлах, в которых нашел искомое слово. Потом можно клацать по ссылке и мы будем переходить на это слово Все просто замечательно, но есть одно но Простой ComboBox добавляеццо на панель, а мля с Edit`ом в нем, нет(фокус не получает) Вот если просто edit сделать, то все замечательно работает, но с ComboBox`ом удобнее всеже Наверно там ставиццо какой-то субкласс(хук) что не дает обрабатывать сообщения от такого ComboBox`a c Edit`ом Я понимаю, что это единичный случай, но может, были с этим у кого-то проблемы уже, и решение было найдено? Вот ссылка на скачку плагина, с ним понятнее скорее всего будет о чем я demonteam.narod.ru/download/SecondarySearch.rar Надо галочки поставить в Add-Ins Manager чтобы плагин подгружался в IDE при старте Там эта панелька убогая сильно, но это не важно суть проблемы видна сразу будет, я так думаю Jupiter если вдруг у тебя время и желание будет, может, посмотришь плагин? ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 15 января 2008 11:22 · Личное сообщение · #14 Demon666 пишет: Нет тут ты мимотазика, я даже добавлю что лучше кодить на С++, но не юзать зомбированно классы, шаблоны, etc И что ж там от С++ останется если не использовать классы и шаблоны ![]() Jupiter пишет: cppasm пишет: надо мозги собрать в кучу после этих пьянок ээт точно ;) терь ещё и дни рождения пошли... ээх Эт не я писал ![]() Demon666 пишет: Гы, ну я ж писал уже, что этот пример для того, что нам без ASM`а никуда Ты наверное встречал вопросы на форумах от новичков -> с чего начать изучение ASM или C++, MASM или FASM, ну вот им и ответ (пусть чешут мосх) Ну всё равно с ASM начинать немного напряжно, особенно если человек в архитектуре не ориентируется. Лучше с HLL какого-нить с плавным уходом в ASM, начиная со встроенного. Но это ИМХО... ![]() |
|
Создано: 17 января 2008 15:33 · Личное сообщение · #15 Гы-гы ![]() Demon666 на твой выпад протефф Си ставим блок ![]() Стандартные функции: stdlib.h _rotr(int x,int n); _rotl(int x,int n); Стандартизировано, есть во всех компиляторах начиная с DOS'овских. Сишный код: #include<stdlib.h> int main(void) { _asm int 3 return _rotr(0x80000000,31); } Асм-листинг из Olly: 00401000 /$ CC INT3 00401001 |. B8 00000080 MOV EAX,80000000 00401006 |. C1C8 1F ROR EAX,1F 00401009 \. C3 RETN Так что на самом деле всё реализуемо ;) ![]() |
|
Создано: 17 января 2008 18:17 · Поправил: Модератор · Личное сообщение · #16 |
|
Создано: 18 января 2008 05:26 · Личное сообщение · #17 Прошу прощения за то что так с опозданием(время мля), жидошекелей всегда мало(их никогда много не бывает), хз. почему %)) cppasm пишет: И что ж там ..++ останется.. Да-да, совершенно верно, а сталобыть правда (ЗЫ: и истЕна тоже), ты же сам написал ответ в своем вопросе: - два плюса там точно останеццо! К примеру, в C++ можно в "любом месте" инициализировать переменную... cppasm пишет: Так что на самом деле всё реализуемо ;) мАлАдЕц! - кто ищет, тот всегда найдет истЕну(было бы время и желание) ;) мля, вот постараюсь выложить исходники(надо только в красочный вид их оформить) cppasm надеюсь, поможешь(?) их гламурненько для общества сделать, только на паблике как ты это делаешь красиво...(я протЕв привата, асек, каналов, etc(это только тормозит осуществление задуманного и новых идей и самореализации)) !!!критика в любой момент приветствуеццо!!! Те, кто силен в Си/C++, ASM(и у кого есть свободное время) просьба проявить желание в халявной помощи для написания (проектов!) – это потом(хз. возможно) вам поможет сэкономить время и поиметь сладких жидошекелей... Да вполне возможно, что это все запутано и непонятно, но поможет многим(надеюсь)… cppasm пишет: Ну всё равно с ASM начинать немного напряжно ПротЕв(!), это зависит от того, кто написал чтиво и от того, кто его читал Вот для примера Создают периодически топики, не могу вступить и скомпилировать пример из статьи/книги Калашникова и т. д. Обсуждают там что-то, и вот появляеццо ветеран форума и постит ссылку bitfry.narod.ru/ Я там ниразу не был, но после этой ссылки обычно с банальными вопросами не возвращаюццо, а пишут: - все понятно спасибо! Тут вопрос, зачем печатать и продавать неудачников прошлого века, есть же современники и практики!? (достаточно обратиццо к автору с коммерческим предложением и будет вам классика не хуже! - ИМХО) Jupiter Нет-нет, тут немного чуть-чуть по-другому, я этот плагин(одна из причин и не случайно) выложил для примера и чтобы показать идею проекта PSDK WinAsm, (ведь плагинов написано очень много, может даже больше чем для оли - ИМХО) плагины – расширяют возможность проги!(нужен только грамотный и интересный подход в PSDK, как это сделано в WinAsm) тут надодумать нет ограничений на посты, даже более того, если есть идеи их надо писать !!!обязательно!!! не думаю что злостно тут будут удалять важные посты(а просьба вообще их не удалять) – это не случайно же оффтопом завеццо!!! Demon666 пишет: косвенно заденем все что шевелиццо и движеццо Я ведь не просто так это написал ;) Я там зареган, но почему-то, постить там сил не хватает Ведь плагин может и на ста тачках работать, а на одной какой-нибудь вообще не запустиццо даже и хз. почему... для примера структура передаваемая плагину (копипаст© WinAsm) HANDLES STRUCT hMain HWND ? hMenu HWND ? hClient HWND ? hStatus HWND ? hRebar HWND ? hMainTB HWND ? hEditTB HWND ? hMakeTB HWND ? Reserved1 HWND ? Reserved2 HWND ? hProjExplorer HWND ? hProjTab HWND ? hProjTree HWND ? hBlocksList HWND ? hOutParent HWND ? hOut HWND ? phImlNormal DWORD ? phImlMonoChrome DWORD ? phAcceleratorTable DWORD ? PopUpMenus POPUPMENUS <?> HANDLES ENDS Мы можем взять почти любой хендл и заюзать для своих нужд, для создания окон(форм%)дельфи, кудаж без него) GUI Когда это все сделано на чистом API, то все просто, но когда юзают ООП - это начинает ограничивать возможности и очень сильно у оли такой щедрости "нет", там немного по-другому сделано, можно вызвать отдельную функу, чтобы узнать то, что нужно, но неудобно – ИМХО вот может косвенно что-то поможет или будет возможность заюзать код(идею) из проекта в другом проекте ;) ведь как практика доказала что скриптовый язык в отладчике нужен, плагины и кодеры тоже ;) вот, на мой взгляд, часть сущности SDK в проекте WinAsm идеальна, нужен только пиар, да и вообще в коммерческих целях описывают в книгах/статьях/форумах откровенно(ИМХО) дерьмо Py.., а интересные идеи(начинают) кануть в лету ;( ведь как обычно крутиццо, вертиццо в голове, а достаточно несколько буквочек и великая прога сделана!(просто надо по возможности больше инфы как это сделано у других в SDK(своего рода обмен полезной информацией!)) интересно всегда послушать мнение участников форума(важны их идеи о их проектах(!!!это все всегда взаимосвязано!!!)) чуть попозже постараюсь отписаться еще...(не держите зла, плиз), это ведь только начало... P. S. Очень прошу проявить терпение тем, кому интересен проект!(плз) ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 19 января 2008 02:21 · Поправил: Demon666 · Личное сообщение · #18 Вот первые исходники(шаблон и бинарик(вдруг нужен будет для сравнения да и для теста тоже)) и ссылка на скачку demonteam.narod.ru/download/PSplus.rar С комментариями чуть попозже, не хватило чет меня на них Суть кода в исходнике, короче че делает Создаеццо окно для запуска скриптов Похоже ппц как на окно у ИДЫ(File->IDC file...), которое появляеццо после запуска скрипта Отличие там только в том, что я убрал двойные кнопки(одна из которых предназначена для вызова редактора скриптов) Я это сделал в контекстном меню (ПKM на кнопке) Там два пункта меню Edit Script LUA и Delete button и вырезал разные проверки, чтобы исходник легче читался В исходнике много переменных написанных чич-то на автомате, чтобы компиль не генерил лишнего кода(мусора) Запуск нового скрипта меню File->Script LUA file... И еще View->Show ScriptDock или View->Hide ScriptDock Скорее всего баги будут, так как исходник не полный, но если вдруг кому че непонятно - пишем здесь, постараюсь поподробнее объяснить И знатакофф С++, просьба тоже сказать свое слово протефф ;) [ADD] Исходник чуть подправил одну проверку удалил случайно(теперь должно окно при выборе файла нормально появляццо) И добавил при удалении всех кнопок с панели, окно автоматически закрываеццо Исходники обновил скачать можно по тойже ссылке ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 26 января 2008 22:52 · Личное сообщение · #19 гы-гы, вот сегодня под пивом(без водки) подшаманил чуток проект надодумать от GUI большего и не потребуеццо, кроме "отладчика" скриптов(может немного(совсем чуть-чуть%)) лучше чем у оли;) ) Что нового: (процентов 7 от оригинала GUI, качество исходников 65%) ЗЫ: комментарии внутри исходников %)) ЗЫЫ: архивчег обновил по старой ссылке ;) P. S. бгг, а да чуть не забыл, пользуйтесь кнопкой F1 в IDA чаще, чем ходите на очко процентов 90 на стопудофф, что там есть в справке истЕна... хм(чешем мосх)-кхе.. пиво заканчиваеццо.. ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 31 января 2008 21:20 · Личное сообщение · #20 Кто-то уже привык к студии, и жить без нее не может, да и вообще вроде как стандарт Маленький ликбез по добавлению проекта в студию(VS 2005) бгг, да-да.. 1. Нужно создать новую папку в папке, где находятся исходники и назвать ее, ну к примеру VS 2005 Project PSplus, там студия будет хранить свои файлы короче мусор, который нам нах и не нужен... пробздимся в меню File->New->Project from Existing Code... появиццо диалог Create New Project from Existing Code Files 2. What type of project would you like to create? выберем Visual C++ и жмем Next > 3. Specify Project Location and Source Files You can choose the files from one or more folders. Project file location: выберете ту самую папку, где студия будет хранить свой мусор к примеру: C:\CODE\IDA\PSplus\VS 2005 Project PSplus Project name: Пишем название: PSplus и жмем Next > 4. Specify Project Settings These details determine how the project is built and the type of the project created. выбераем Use external build system и жмем Next > 5. Specify Debug Configuration Settings Set the debug configuration's settings. Build command line: Указываем путь и имя батника к примеру: C:\CODE\IDA\PSplus\make.bat при нажатии в студии кнопки Build Selection(где в место Selection будет имя проекта(PSplus)) или кнопки Build Solution(или в меню(тоже самое)) запустится наш батник и начнется компиляция Rebuild command line: Указываем путь и имя батника(в нашем случае тоже самое что и для Build command line) к примеру: C:\CODE\IDA\PSplus\make.bat при нажатии в студии кнопки Rebuild Selection(или в меню(тоже самое)) запустится наш батник и начнется компиляция теперь все ошибки, произошедшие во время компиляции, будут отображается в самой студии, а не в консольном окне Windows 6. и жмем Finish (вроде все, но..) 7. Теперь можно добавить в созданный только что проект в VS 2005, файлы исходников и т. д. для последующего их редактирования(изменения) написания в них нового кода для этого надо вызвать меню View->Solution Explorer в появившемся окне через контекстное меню Add->Existing Item... выбираем файлы исходников нашего проекта ну, или создаем новые через контекстное меню Add->New Item... теперь окна подсказок для показа значений констант, прототипов функций, мощный поиск по файлам и т. д. наши %) бу-го-га, теперь МЫ элита пиздастых(профессиональных) программеров(гы-гы, не сдержался) теперь МЫ пишем в студии(VS 2005) дрова %))) а да, чуть не забыл, надо еще (не обязательно это делать) в Solution Configurations поставить Release ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 03 февраля 2008 21:19 · Поправил: Модератор · Личное сообщение · #21 Archer (вдруг, если читать будешь) тут есть два вопроса: (если нет желания ответить, то потри этот пост) Первый Что думаешь(?) вот про это: [url=http://www.wasm.ru/forum/viewtopic.php?id=24767&p=2 ]http://www.wasm.ru/forum/viewtopic.php?id=24767&p=2 [/url] там вроде парни горят желанием отладчик писать да и вообще вкратце, если можно.. как там движения есть с отладчиком (интересно же очень) а то, как у негра в святилище, хрен че видать Второй Отладчику по-любому нужен скриптовый движок – ИМХО Че-нить думал в этом направлении? Ты планируешь на экспорт функи отладчика делать(?), типа как это сделано у оли и ИДЫ в SDK Поддержку плагинов(?) и передачу плугу хендлов окон(GUI) для расширения возможностей со стороны Вообщем плз. просвети малоимущих хоть чуть-чуть (думаю не только мну одному это интересно) Если можно, то тут (чтоб народ новости с дальнего фронта почитал...) Archer: я, конечно, понимаю, что это оффтоп, но не настолько же ![]() 1. Ну хотят-пусть пишут, у меня команда набрана уже, в принципе. ![]() 2. Скрипты будут, насчёт плагов-тоже, наверно, хер его знает. Сделать бы бетку... ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 18 февраля 2008 00:58 · Личное сообщение · #22 бгг, и снова вернее продолжить сегодня решил проект.. что нового, а собственно ничего, плагин даже беткой назвать трудно но об особенностях надодумать пару слов черкнуть стоит и так... добавил немного интеллекта скриптдоку теперь можно запускать через плагин не только скрипты LUA, но и IDC расширение скрипта может быть любым, плагин сам определит, что за скрипт и пометит соответствующей иконкой, также, если в скрипте при запуске есть ошибки он тоже эти скрипты помечает специальными иконками, вообщем не запутаешься установка банальна проста надо скопипастить библу lua5.1.dll из архива в директорию IDA (C:\Program Files\IDA), короче туда где находиццо idag.exe/idag64.exe Бинарик плагина надо положить в папку с плагинами(C:\Program Files\IDA\plugins) На этом в принципе и все, теперь инфа для тех, кому интересен сам процесс написания плагина Собственно код, относящийся к LUA, находиццо в файле ScriptEngineLUA.cpp Я добавил в исходник свой класс и даже там создаеццо объект Знаю что спецы протефф таких вещей, но в данном случае добавление класса оправдано Это сделано, для того чтобы убрать из исходника длинные строки API функций для работы с ini файлом настроек(код чистенький остаееццо, как слеза девственницы только чистый API) "оператор new переопределен" и вставляет наш код вместо бу-го-га от Microsoft Так теперь основные моменты и небольшое описание фунок которые там, на данный момент есть Вообщем решено было использовать название команд в скрипте такие же, как и у скриптового движка оли Команда log (все команды и не только регистро-зависимы, то есть log и Log это НЕ одно и тоже!) Выводит сообщения в message window ИДЫ, некое подобие как у оли окно Log data Но имеет более расширенный формат Для примера можно воспользоваться стандартными возможностями библиотек LUA в скрипте объявляется новая переменная в любом месте в оли это affair делаеццо с помощью команды VAR x у нас просто пишется для примера --Присваиваем переменным значения (символы "--" означают, что это комментарий) x=0x20; str="переменная"; --Выводим в окно ИДЫ строку log(string.format("\n%s x=%.08X",str,x)); в окне message window ИДЫ появиццо: Run Script 'C:\LUA\Scripts\test.lua' переменная x=00000020 string.format – это стандартная функа движка LUA, там их много.. как их юзать, для этого надо почитать литератору, ссылки на которою довались выше надодумать, на глаз заметны большие возможности скриптового движка LUA, чем у оли а я даже где-то читал, что сам один из авторов скриптового движка оли, грезил мечтой подключить к оли скриптовый движок LUA так что у нас еще там есть, а вот функа StringtoHex, чет поднапряг я мосх, так и не смог вспомнить подобную функцию в стандартных библиотеках C++, пришлось написать свою, так оказалось быстрее, чем вспоминать вопрос: может, кто знает из спецофф, есть ли подобная в C++, только не надо такую что весит 10кило так примерно байт 200 не более... если нет, то будем ахтунгофф из Microsoft считать неудачниками Команда fill Подобная есть у оли(но по возможностям отличаеццо) FILL addr, len, value Эта команда заполняет память программы, начиная с указанного адреса, заданным значением, и с указанным размером. Видел вопросы от некоторых, есть ли специальная возможность в ИДЕ патчить Выяснилось что есть, но по умалчанию в меню этого нет, надо в файле конфигурации специально включать Но и опять мимотазика она патчит только образ, но не сам *.exe/dll etc Вот эта команда скрипта fill патчит сам *.exe/dll etc Немного о ней fill(addr, len, value, flag); параметр addr указывает адрес откуда начинаем патчить параметр len длина параметр value это новые значения, которыми будем заполнять, тут можно как у оли просто указать для примера 0x90 но есть немного шире возможность можно указать текстовую строку для примера "90C35490459090" плагин пропатчит именно этими байтами а длина будет указывать столько количество раз повторить эту строку параметр flag тут значение 0 указывает что НЕ надо патчить *.exe/dll etc, пропатчена будет только база(образ) ИДЫ если 1, то пачиццо будет и сам *.exe/dll etc вместе с базой для примера в скрипте fill(0x401000,1,"909090C3",1); тут еще стоит сказать что *.exe/dll etc должен находиццо тамже где и база(короче в директории где дизасмилась прога) вместе с *.idb функа reanalysis чет я полазил по SDK ИДЫ так и не нашел, потом посмотрел, а такая функа есть в ИДЕ, но не экспортируеццо почему-то, вот я и рипнул от туда оригинал нужна она, для того чтобы, когда пропатчим прогу, данные визуально не изменяюццо и такое ощущение что не пропатчилось, вот ее та мы и вызываем чтобы пофиксить этот баг, перерисовываем главное окно ИДЫ кстати в самом скрипте ИДЫ, если применить PatchByte, тоже изменяеццо, только если окно покрутить короче не перерисовываеццо это дело так ну вот МЫ и подобрались к самому главному, как добавлять свой код #pragma pack(push,1) luaL_Reg PSplus[]= { {"log",log}, {"fill",fill}, }; #pragma pack(pop) int InitializationLUA(void) { if (!(L=lua_open())) return -1; // создаем новый стек LUA luaL_openlibs(L); // загружаем все стандартные библиотеки LUA for(int i=0; 2>i; i++) lua_register(L,PSplus[i].name,PSplus[i].func); // регистрируем наш массив функций return 0; } /*sizeof(PSplus)*/ VOID TerminateLUA() { lua_close(L); } Пишем свою функцию и помещаем ее в файл ScriptEngineLUA.cpp И добавляем в массив PSplus Так для примера функция (функция должна быть выше массива PSplus, но ниже строки lua_State *L;) int get_dword(lua_State *L) { lua_pushnumber(L,get_original_long(lua_tonumber(L,-1))); return 1; } В массив PSplus вставляем {"get_dword",get_dword}, (в качестве эксперимента попробуйте сами просто добавить этот код, что выше в исходник, который можно скачать по старой ссылке(90kb), так сказать набейте руку перед своим творчеством) get_dword(addr); параметр addr читает dword по указанному адресу, оригинальный! то есть даже если пропатчить то команда скрипта возвратит оригинальные байты dword, а не пропатченые, если такое уже было сделано ИДА имеет свойство сохранить оригинальные байты до их изменения, и с помощью этой команды можно вернуть/узнать их вопрос: может, кто знает из спецофф, вот надо в C++ найти какой-нибудь крючок вместо 2 вот здесь for(int i=0; 2>i; i++) можно написать вот так for(int i=0; sizeof(PSplus) >i; i++) но не прет, компиль цуко пишет по 40 байт на единицу, короче неправильно размер определяет можно тупо ставить число(в нашем случае будет 3) сколько там в массиве команд, но это не есть гуд (можно и забыть случайно) вот и надо чтобы на автомате это дело было, может массив как-то надо изменить чтобы правильно определялся размер... функция lua_tonumber(L,-1) принимает значение, передаваемое в скрипте для обработки в нашей функции тут, пожалуй, надо добавить если мы передаем 3 значения, то первое прочитать из стека надо с индексом lua_tonumber(L,-3) второе lua_tonumber(L,-2) и третье lua_tonumber(L,-1) return 1; - тут 1 означает, сколько мы возвращаем обратно в скрипт значений, после обработки полученных данных их может быть и 2 и 3 и т. д. возврашаюццо(помещаются в стек) они при помощи функций LUA lua_pushnumber(L,value); для принятия строки передаваемой из скрипта в нашу функцию использовать надо lua_tostring(L,-1) за более полной информацией надо курить хелпер LUA смысл всего этого - что каждый, если добавит (так сказать приложит руку)по одной своей функции сто человек по одной это уже сто команд в скрипте движок будет развиваццо и расширять свои возможности очень быстро возможности, мягко говоря, безграничны... ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 26 февраля 2008 00:52 · Личное сообщение · #23 Новости с дальнего фронта Некоторые авторы борются против банального копипаста и специально в исходниках заменяют буржуйские символы на русские, тем самым заставляют компиль генерить ошибки ньюбику приходиццо думать, почему код не работает и искать причину – тем самым улучшают понимание в кодинге обучающегося у нас будет подход к обучению другой я буду рассказывать как добавить новый код в проект(то есть вам придеццо самим собирать плагин из разных кусков кода) теперь будет обновляццо "только" новый файл CommandFunctions.cpp (его пока нет, я его выложу чуть попозже вместе с бинариком) для примера как это будет выглядеть вернемся к вопросу о for(int i=0; 2>i; i++) для того чтобы решить эту задачу надо добавить вот такой код в файл проекта PSplus.h extern "C++" template <typename T, size_t N> char (*RtlpNumberOf( UNALIGNED T (&)[N] ))[N]; #define RTL_NUMBER_OF_V2(A) (sizeof(*RtlpNumberOf(A))) И в файле ScriptEngineLUA.cpp заменить строчку в функе InitializationLUA for(int i=0; 2>i; i++) на for(int i=0; RTL_NUMBER_OF_V2(PSplus)>i; i++) Немного забегая в перед могу добавить, что мы также коснемся некой эмуляции с работой типов размером в 64 бита ;) также в новом архиве будет присутствовать хелпер(sources.help) по "командам" файла sources в нем будет описание опций, но только намекающие на понимание для чего это нужно, но не более не все имеют желание научиццо вступать и компилировать и вполне возможно, что захотят поюзать плагин для этого решено было добавить защиту в плагин от ЛАМО-челов плагин будет своего рода полнофункциональной демкой, его ограничения будут запуск скрипта всего два раза и еще кое-что, что придеццо искать вам самим так как плагин на данный момент имеет минимальный функционал то и защита его будет (-10) по мере повышения возможностей плагина его защита будет увеличиваццо вплоть до ВМ`а %)) вешаццо паблик навесная защита никакая не будет(!) все только свое – типа крякми с разным уровнем защиты в исходниках естественно кода защиты не будет, а вот в бинарике будет... ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
![]() |
eXeL@B —› Оффтоп —› Plugin/ScriptIDA&etc... |