Показать полную графическую версию : Помогите с программой IDA...
by_gangster
03-04-2013, 23:41
Здравствуйте уважаемые программисты помогите разобраться с одним вопросом по программе IDA.. Писал тут (http://forum.ru-board.com/topic.cgi?forum=33&topic=13647#1)
Delirium
04-04-2013, 05:53
А здесь продублировать нельзя? Нет желания копаться в ru board'овской свалке.
помогите разобраться с одним вопросом по программе IDA »Может стоит задать этот вопрос здесь, а не отфутболивать по разным ссылкам?
Скажите хотя бы версию IDA, которой пользуетесь. Там столько вариантов, что достаточно трудно понять про что вы говорите. И если можно, ссылку на ваш вариант. Так будет легче понять.
Посмотрите здесь (http://www.cracklab.ru/download.php), думаю найдёте всё, что вам нужно.
by_gangster
04-04-2013, 18:59
Имеется .dll файл который я открыл в программе IDA (v6.1) и отредактировал. Как мне теперь сохранить обратно в dll формате ?
deviance
04-04-2013, 19:30
by_gangster, IDA, насколько я знаю, умеет только генерировать .diff файлы, в которых различия между оригинальным файлом и измененным записаны в формате: offset: old-byte new-byte
Патч нужно делать самому - руками в hex-редакторе. Или напишите утилиту.
SharkyUA
05-04-2013, 01:20
Создание патчей (dif) в IDA (Англ.) (http://marcoramilli.blogspot.com/2011/01/how-to-patch-binary-with-ida-pro.html)
deviance
05-04-2013, 16:12
by_gangster, можете использовать следующий код:
#include <stdio.h>
#include <Windows.h>
#include <ImageHlp.h>
#define MAX_BIN_PATCHES 100
#define MAX_LINE 17
#define CHUNK_FORMAT "%08x: %02x %02x"
typedef struct patch_chunk_s{
unsigned int offset;
unsigned char old_byte;
unsigned char new_byte;
} patch_chunk_t;
int read_chunks(char* from_file, patch_chunk_t* chunks){
char buf[MAX_LINE] = {0};
FILE* f = NULL;
int cnt = 0;
f = fopen(from_file, "r");
if ( f == NULL )
return -1;
while ( cnt < MAX_BIN_PATCHES ){
if ( fgets(buf, MAX_LINE, f) == NULL){
break;
} else if ( *buf == '\n' || buf[8] != ':' || buf[9] != ' ' || buf[12] != ' '){
continue;
} else
sscanf(buf, CHUNK_FORMAT, &chunks[cnt].offset, &chunks[cnt].old_byte, &chunks[cnt].new_byte);
cnt++;
}
return cnt;
}
void write_chunks(LOADED_IMAGE* image, patch_chunk_t* chunks, unsigned nchunks){
unsigned idx = 0;
while ( idx < nchunks )
{
if ( chunks[idx].offset > image->SizeOfImage ){
printf("0x%08X: invalid offset\n", chunks[idx].offset);
}
else if ( image->MappedAddress[chunks[idx].offset] != chunks[idx].old_byte ){
printf("0x%08X: %02X -> %02X err\n", chunks[idx].offset, chunks[idx].old_byte, chunks[idx].new_byte);
}
else {
image->MappedAddress[chunks[idx].offset] = chunks[idx].new_byte;
printf("0x%08X: %02X -> %02X ok\n", chunks[idx].offset, chunks[idx].old_byte, chunks[idx].new_byte);
}
idx++;
}
}
int main(int argc, char* argv[])
{
patch_chunk_t chunks[MAX_BIN_PATCHES] = {0};
char usage[] = {"usage: [file-to-patch] [ida-diff]\n"};
int ret = -1;
char* image_path = NULL;
char* diff_file = NULL;
unsigned nchunks = 0;
LOADED_IMAGE li;
if (argc < 3){
printf(usage);
return -1;
}
else {
image_path = argv[1];
diff_file = argv[2];
}
ret = MapAndLoad(image_path, NULL, &li, 0 /*.exe default ext.*/, 0 /*readwrite access*/ );
if ( ret == 0 ){
printf("Unable to load %s\n", image_path);
return -1;
}
else {
printf("Image %s loaded.\n",image_path);
}
ret = read_chunks(diff_file, chunks);
if ( ret > 0 ){
nchunks = ret;
printf("File %s loaded. %d chunks read.\n", diff_file, nchunks );
}
else {
printf("Unable to load %s: ", diff_file);
if ( ret == 0 )
printf("file is empty.\n");
else
printf("no access.\n");
return -1;
}
write_chunks(&li, chunks, nchunks);
ret = UnMapAndLoad(&li);
return ret;
}
by_gangster
06-04-2013, 09:34
deviance, Я извеняюсь конечно, но это что за язык программирования ? Я просто в программировании вобще 0.
deviance
06-04-2013, 21:07
by_gangster, что же Вы изменяете в .dll файле, если не знаете программирования? Текстовые строки?
SharkyUA дал отличную ссылку на статью. Ознакомьтесь.
by_gangster
11-04-2013, 17:57
deviance, Можете пожалуйста помочь, я в той статье которую дал SharkyUA, не понял... Извеняюсь...
P.S Да меняю Текстовые строки »
deviance
11-04-2013, 19:54
by_gangster, для редактирования текстовых строк Вам будет достаточно шестнадцатеричного редактора. Например, 010 Editor (http://www.sweetscape.com/download/010EditorWin32Installer.exe).
Откройте свой файл этим (или любым другим) редактором, найдите ненужную строку и замените на нужную.
by_gangster
11-04-2013, 21:07
deviance, Можно ли сделать пробел ? В этой программе т.е если там текст text а я пишу texting нужно что бы остальной текст не удалялся
deviance
12-04-2013, 00:01
by_gangster, то есть, Вы хотите дописать что-то к слову "text"? И чтобы при этом весь текст, который правее, съехал? Этого сделать не получится.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC