Автор |
|
|||
---|---|---|---|---|
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 02 авг 2017, 23:57 |
||||
Сообщения: 133 |
Цитата: кто встречал
|
|||
|
|
|||
dimmich |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 03 авг 2017, 17:35 |
Сообщения: 7 |
Не имею данного программатора. Но имею некоторый опыт по USB шнурам. На моей практике было много случаев, когда подобная проблема с нечётким обменом информацией была именно из-за USB шнура. Предполагаю: может в новой прошивке сменили скорость обмена данными с компом, или алгоритм передачи пакетов, и теперь инфа нечётко проходит. В некоторых случаях помогало одеть ферритовый фильтр (кольцо) на шнур. Ну и конечно взять более короткий и/или толстый шнур должно помочь. |
|
|
dimar |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 03 авг 2017, 23:46 |
Сообщения: 46 |
Спасибо всем за ответ решил вопрос установив wizardpro и прога обновила драйвер после этого заработал прогер с wizardpro а далее и с minipro и это на оба компа |
|
|
sevmaster |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 09 авг 2017, 13:54 |
Сообщения: 0 |
На днях пришел с Китая tl 866A . не мог понять почему не работает. Оказалось что два контакта в программаторе в КЗ. Кз устранил и все заработало. |
|
|
IOD |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 10 авг 2017, 21:23 |
Сообщения: 4445 |
Пришли с Китая SST39SF040 5шт, через переходник ни одна не зашилась. К одной подпаял к ногам проводки и напрямую в ZIF-панель завел, зашилась на ура. |
|
|
TL866 |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 13 авг 2017, 04:24 |
Сообщения: 3 |
sevmaster писал(а): На днях пришел с Китая tl 866A . не мог понять почему не работает. А китайцам не писал на компенсацию за такие недостатки товара ??? А то они свой товар не хотят проверять перед отправкой ,совсем обнаглели ! И упаковывают тоже как попало ………. |
|
|
Ruzal |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 22 авг 2017, 15:52 |
Сообщения: 32 |
Всем привет, помогите, не могу на MiniPro TL866CS (переделаный в версию A) зашить микросхему фотмата plcc32, уже кучу микросхем перепробовал, переходники менял, пишет внешней кз, как быть?
|
|
|
lom10 |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 22 авг 2017, 18:39 |
Сообщения: 16 |
А какую конкретно микросхему и какие переходники используете? |
|
|
Барзанукаев Ислам |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 12 сен 2017, 11:33 |
Сообщения: 229 |
при попытке прошить биос выдает, кабель менял, программатор тоже |
|
|
Eskariot |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 12 сен 2017, 11:55 |
Сообщения: 130 |
во вкладке config флаг QE поставьте перед прошивкой |
|
|
igils |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 12 сен 2017, 12:41 |
Сообщения: 11048 |
Барзанукаев Ислам: и какой вывод можно сделать? Правильно — дохлая флешка. Последний раз редактировалось igils 12 сен 2017, 12:52, всего редактировалось 1 раз. |
|
|
Барзанукаев Ислам |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 12 сен 2017, 12:50 |
Сообщения: 229 |
Eskariot писал(а): во вкладке config флаг QE поставьте перед прошивкой есть, разницы нет igils писал(а): дохлая флешка если даже флешка читается |
|
|
merkulss |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 12 сен 2017, 20:08 |
Сообщения: 158 |
Панельку промой ифлешку, или запаяй. |
|
|
vzrivpaket |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 13 сен 2017, 12:20 |
Сообщения: 1533 |
Барзанукаев Ислам писал(а): если даже флешка читается Не показатель,даже если контакт нормалек.Смотрим на скрин,ошибки,верификацию не пройдет,микруха битая… з.ы.Касаемо самого программатора…Все еще актуален имхо,в качестве основного уже не то а в качестве вспомогательного самое оно… Относительно цены,функционала и т.д. равных нет… |
|
|
EvgeniyNuAfanasievi4 |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 15 сен 2017, 21:39 |
Сообщения: 19 |
vzrivpaket писал(а): Барзанукаев Ислам писал(а): если даже флешка читается Не показатель,даже если контакт нормалек.Смотрим на скрин,ошибки,верификацию не пройдет,микруха битая… з.ы.Касаемо самого программатора…Все еще актуален имхо,в качестве основного уже не то а в качестве вспомогательного самое оно… Относительно цены,функционала и т.д. равных нет… а какой же тогда основной и что им такое шить? Матрицы?
|
|
|
merkulss |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 15 сен 2017, 22:22 |
Сообщения: 158 |
Нанды, мульты,jtag…модно бесконечно перечислять что умеют крутые программаторы |
|
|
tyzman |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 24 сен 2017, 16:30 |
Сообщения: 165 |
Доброго всем дня. |
|
|
scrofula |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 24 сен 2017, 23:57 |
Сообщения: 133 |
tyzman писал(а): Доброго всем дня. Банальный непропай. Визуальным осмотр делали хоть? откройте присмотритесь
|
|
|
zalmatt |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 02 окт 2017, 19:16 |
Сообщения: 60 |
Dwit писал(а): дык, только половину Мне так показалось, что начиная с 32 MB программа, а может и прошивка минипро, потребует серьёзной модификации кода, т.к это уже 4-байтная адресация… Дойдут ли руки у китайца?… Sent from my LG-H815 using Tapatalk |
|
|
Dwit |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 05 окт 2017, 19:53 |
Сообщения: 304 |
zalmatt писал(а): Мне так показалось, что начиная с 32 MB программа, а может и прошивка минипро, потребует серьёзной модификации кода, т.к это уже 4-байтная адресация… Дойдут ли руки у китайца?.. Я им письма катал, 0 реакции, постал справился без проблем. |
|
|
airpower |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 06 окт 2017, 17:35 |
Сообщения: 157 |
В свое время Postal тоже очень помог , когда нужно было прошить 25Q128 до сих пор им пользуюсь , не очень быстрый , но со своими задачами справляется |
|
|
segment |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 09 окт 2017, 00:34 |
Сообщения: 8 |
А как русификатор правильно поставить на V 6.60 ? Просто запустить MiniPro_6.6_Rus.exe взятый с 11-ой страницы ? Чёт у меня при этом пишет — Ошибка файла InfoIC.dll . Говорят от версии V 6.50 подходит русик один в один… .у кого есть-поделитесь. |
|
|
sanchelo81 |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 13 окт 2017, 23:41 |
Сообщения: 267 |
Мужики подскажите может кто делал, как прошить nand flash tsop48 s29gl032n90tfi04 без кроватки микросхема в списке есть а вот как ее пристроить к нему переходника у меня нет, может какие варианты есть ??? |
|
|
merkulss |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 14 окт 2017, 00:30 |
Сообщения: 158 |
Это не нанд, это nor. Без фирменного переходника никак. |
|
|
Maxim Skridonenko |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 14 окт 2017, 00:40 |
Сообщения: 953 |
разве 866 поддерживает их ?
|
|
|
merkulss |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 14 окт 2017, 01:00 |
Сообщения: 158 |
Есть. Но вся суть в переходнике. |
|
|
Maxim Skridonenko |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 14 окт 2017, 01:01 |
Сообщения: 953 |
хотелось бы на него глянуть
|
|
|
merkulss |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 14 окт 2017, 01:20 |
Сообщения: 158 |
|
|
|
Maxim Skridonenko |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 14 окт 2017, 01:51 |
Сообщения: 953 |
этот переходник — не проблема
|
|
|
Oblom |
Заголовок сообщения: Re: Программатор MiniPro TL866CS (A) Добавлено: 14 окт 2017, 03:14 |
Сообщения: 168 |
sanchelo81 писал(а): Мужики подскажите может кто делал, как прошить nand flash tsop48 s29gl032n90tfi04 без кроватки микросхема в списке есть а вот как ее пристроить к нему переходника у меня нет, может какие варианты есть ??? На кроватке стоят сдвиговые регистры. И один дешёвый «секъюритити» чип. |
|
|
From quite some time already I got interested in the art of electronics and more specifically into hardware reverse engineering.
Since I’m mostly interested in the device’s firmware, I have to deal with EEPROM or Flash chips.
MiniPro turned out to be my weapon of choice for reading or programming memory chips.
However, sometimes the device I’m playing with, uses a chip that MiniPro doesn’t yet have in its database.
Unfortunately, MiniPro doesn’t use «user friendly» database for the supported chips and I’m left with no other option, than wait for the authors to _eventually_ add it into the database, or, alternatively, reverse engineer the database, and add whatever I want by myself.
The author choose a DLL file as a database — InfoIC.dll
Removing the DLL from the program folder leads to error message and program crash.
Something I should mention is that the program is really, really badly coded. There are a lot of places with obvious buffer overflows, and crashing the program instead of safely terminating it when the crucial DLL is not found, is the most obvious sign, about its code quality.
Whatever, lets dug into InfoIC.dll itself:
A hand full of export functions. Seems easy enough.
??0CInfoIC@@QAE@XZ, ??4CInfoIC@@QAEAAV0@ABV0@@Z and ?nInfoIC@@3HA are junk exports, so I’ll ignore them.
From the executable side, the important functions are initialized here:
Assembly.text:004424E2 push offset aInfoic_dll ; "infoIC.dll"
.text:004424E7 call ds:LoadLibraryA
.text:004424ED cmp eax, ebp
.text:004424EF mov hInstance, eax
.text:004424F4 jz loc_44259B
.text:004424FA mov edi, ds:GetProcAddress
.text:00442500 push offset aGeticstru ; "GetIcStru"
.text:00442505 push eax
.text:00442506 call edi ; GetProcAddress
.text:00442508 mov ecx, hInstance
.text:0044250E push offset aGeticmfc ; "GetIcMFC"
.text:00442513 push ecx
.text:00442514 mov _GetIcStru, eax
.text:00442519 call edi ; GetProcAddress
.text:0044251B mov edx, hInstance
.text:00442521 push offset aGeticlist ; "GetIcList"
.text:00442526 push edx
.text:00442527 mov _GetIcMFC, eax
.text:0044252C call edi ; GetProcAddress
.text:0044252E mov _GetIcList, eax
.text:00442533 mov eax, hInstance
.text:00442538 push offset aGetmfcstru ; "GetMfcStru"
.text:0044253D push eax
.text:0044253E call edi ; GetProcAddress
.text:00442540 mov ecx, hInstance
.text:00442546 push offset aGetdllinfo ; "GetDllInfo"
.text:0044254B push ecx
.text:0044254C mov _GetMfcStru, eax
.text:00442551 call edi ; GetProcAddress
.text:00442553 mov ecx, _GetIcStru
.text:00442559 mov _GetDllInfo, eax
.text:0044255E cmp ecx, ebp
.text:00442560 jz short loc_44257E
.text:00442562 cmp _GetIcMFC, ebp
.text:00442568 jz short loc_44257E
.text:0044256A cmp _GetIcList, ebp
.text:00442570 jz short loc_44257E
.text:00442572 cmp _GetMfcStru, ebp
.text:00442578 jz short loc_44257E
.text:0044257A cmp eax, ebp
.text:0044257C jnz short loc_442593
.text:0044257E loc_44257E:
.text:0044257E mov edx, hInstance
.text:00442584 push edx
.text:00442585 call ds:FreeLibrary
.text:0044258B mov hInstance, ebp
.text:00442591 jmp short loc_44259B
.text:00442593 loc_442593:
.text:00442593 cmp hInstance, ebp
.text:00442599 jnz short loc_4425A7
.text:0044259B loc_44259B:
.text:0044259B push ebp
.text:0044259C push ebp
.text:0044259D push offset aIcListDllFileE ; "IC List Dll file error!"
.text:004425A2 call sub_488284
So, it seems like this the only check that verifies if InfoIC.dll lib is valid or not.
I’ve compiled a DLL, containing the exports GetDllInfo, GetIcList, GetIcMFC, GetIcStru and GetMfcStru and made all of them as voids, with no arguments.
C#include <windows.h>
#define DLL_EXPORT __declspec(dllexport)
void DLL_EXPORT GetIcStru() { }
void DLL_EXPORT GetIcMFC() { }
void DLL_EXPORT GetIcList() { }
void DLL_EXPORT GetMfcStru() { }
void DLL_EXPORT GetDllInfo() { }
BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
switch (fdwReason) {
case DLL_PROCESS_ATTACH: break;
case DLL_PROCESS_DETACH: break;
case DLL_THREAD_ATTACH: break;
case DLL_THREAD_DETACH: break;
}
return TRUE;
}
Now the program no longer shows the warning message, but it crashed again.
The next thing I did, was to load MiniPro.exe in OllyDbg with its original InfoIC.dll, and set a breakpoint:
Assembly.text:004424E2 push offset aInfoic_dll ; "infoIC.dll"
.text:004424E7 call ds:LoadLibraryA ; here
.text:004424ED cmp eax, ebp
.text:004424EF mov hInstance, eax
.text:004424F4 jz loc_44259B
...
When the library is loaded, set breakpoints on the entry points of the exports and write down the execution order.
At execution, only GetMfcStru got called, so I’ve start the reverse engineering here:
Assembly.text:10001020 public GetMfcStru
.text:10001020 GetMfcStru proc near
.text:10001020
.text:10001020 arg_0 = dword ptr 4
.text:10001020 arg_4 = dword ptr 8
.text:10001020
.text:10001020 mov eax, [esp+arg_0] ; Manufacturer ID
.text:10001024 push esi
.text:10001025 push edi
.text:10001026 mov edi, [esp+8+arg_4] ; memcpy : destination address
.text:1000102A lea ecx, [eax+eax*8] ; / calculate offset
.text:1000102D lea edx, [eax+ecx*2] ;
.text:10001030 mov ecx, 13h ; memcpy : number of DWORDs to copy
.text:10001035 xor eax, eax ; return 0
.text:10001037 lea esi, unk_101691E0[edx*4] ; memcpy : source address
.text:1000103E rep movsd ; memcpy
.text:10001040 pop edi
.text:10001041 pop esi
.text:10001042 retn
.text:10001042 GetMfcStru endp
The program obviously accept two arguments — arg_0 and arg_4. The rest is simply a memcpy() implementation, copying a piece of data from address of the DLL to a buffer provided as arg_4 based on a offset provided by arg_0.
Knowing the size of the copied buffer (0x13 DWORDs), I’ve took some data from unk_101691E0:
InfoIC.dllOffset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 001691E0 00 00 00 00 65 00 00 00 41 43 45 00 00 00 00 00 ....e...ACE..... 001691F0 00 00 00 00 00 00 00 00 00 00 00 00 41 43 45 20 ............ACE 00169200 54 65 63 68 6E 6F 6C 6F 67 79 00 00 00 00 00 00 Technology...... 00169210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00169220 00 00 00 00 B0 47 04 10 47 00 00 00 ....�G..G...
It looks like some pretty simple structure, and after some research back and forward through main executable and DLL, I was able to obtain a valid structure:
Ctypedef struct MfcStru {
DWORD mfc_id; // ID of the Manufacturer
DWORD mfc_logo; // Manufacturer logo ID. Logos are hardcoded as BMP resources into the DLL
char mfc_name_short[20]; // Short manufacturer name (eg. "ATMEL", "ALI", etc.)
char mfc_name_full[40]; // Full manufacturer name (eg. "Atmel Corporation", "Acer Laboratories Inc", etc.)
byte* mfc_ic_struc; // Pointer to the ICs structures buffer
DWORD mfc_ic_count; // Number of ICs for this manufacturer
} MfcStru;
Having this information, I’ve updated my DLL like so:
Cvoid DLL_EXPORT GetMfcStru(DWORD id, byte *result) {
MfcStru Mfc = {0, 0, "TEST (short)", "TEST (long)", NULL, 0};
memcpy(result, &Mfc, sizeof(MfcStru));
}
Executing it as-is, again crashed the program here:
Assembly00461DC9 |. 8D4424 00 LEA EAX,DWORD PTR SS:[ESP] ; ESP is holding the result
00461DCD |. 56 PUSH ESI
00461DCE |. 57 PUSH EDI
00461DCF |. 50 PUSH EAX ; result
00461DD0 |. 51 PUSH ECX ; id
00461DD1 |. FF15 B0CB5200 CALL DWORD PTR DS:[52CBB0] ; call to GetMfcStru
00461DD7 |. A1 18C75200 MOV EAX,DWORD PTR DS:[52C718] ; EAX = 0, as iterator for MfcStru.mfc_ic_struc
00461DDC |. 83C4 08 ADD ESP,8
00461DDF |. 8D0440 LEA EAX,DWORD PTR DS:[EAX+EAX*2]
00461DE2 |. 8D14C0 LEA EDX,DWORD PTR DS:[EAX+EAX*8]
00461DE5 |. 8B4424 4C MOV EAX,DWORD PTR SS:[ESP+4C] ; points to MfcStru.mfc_ic_struc
00461DE9 |. 8A0C90 MOV CL,BYTE PTR DS:[EAX+EDX*4] ; crash occurs here
I can easily calculate the size of MfcStru.mfc_ic_struc structure like so:
if, EAX = 1 (eg. second entry, since the first is positioned at 0)
1+1*2 = 3;
3+3*8 = 27;
Because those are DWORDs, 27*4 gives me 108 or 0x06C as final size in bytes for MfcStru.mfc_ic_struc entry.
The starting address is basically MfcStru.mfc_ic_struc value 0x100447B0, minus the DLL image size 0x10000000, or simply 0x000447B0:
InfoIC.dllOffset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 000447B0 01 00 00 00 00 00 00 00 01 00 00 00 41 43 45 32 ............ACE2 000447C0 34 43 30 32 41 00 00 00 00 00 00 00 00 00 00 00 4C02A........... 000447D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 000447E0 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 ................ 000447F0 00 00 00 00 00 00 80 00 08 00 00 00 08 00 00 00 ......�......... 00044800 10 27 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .'.............. 00044810 00 00 00 00 00 00 00 08 80 00 00 00 ........�...
So, what I did next was to put those bytes in a buffer, assign it to MfcStru.mfc_ic_struc and set the MfcStru.mfc_ic_count to 1, as if there’s only one entry in the IC database.
Cbyte ic_struc[] = "x01x00x00x00x00x00x00x00x01x00x00x00x41x43x45x32"
"x34x43x30x32x41x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x01x00x00x00x00x00x00"
"x00x00x00x00x00x00x80x00x08x00x00x00x08x00x00x00"
"x10x27x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x08x80x00x00x00";
void DLL_EXPORT GetMfcStru(DWORD id, byte *result) {
MfcStru Mfc = {0, 0, "TEST (short)", "TEST (long)", ic_struc, 1};
memcpy(result, &Mfc, sizeof(MfcStru));
}
Alright, the program no longer crashes on execution.
However, clicking on the button for Device select, still crashes it.
Same way as before, I’ve set breakpoints to the export functions entry points, clicked the button and it turned out, now GetIcMFC is executed.
Stepping over it, crashes the program, so I took a look what happens inside the original InfoIC.dll:
Assembly.text:10001090 public GetIcMFC
.text:10001090 GetIcMFC proc near
.text:10001090
;...
.text:10001090 arg_0 = dword ptr 4
.text:10001090 arg_4 = dword ptr 8
.text:10001090 arg_8 = dword ptr 0Ch
.text:10001090
.text:10001090 sub esp, 7Ch
.text:10001093 push ebx
.text:10001094 push ebp
.text:10001095 push edi
.text:10001096 mov edi, [esp+88h+arg_0]
.text:1000109D or ecx, 0FFFFFFFFh
.text:100010A0 xor eax, eax
.text:100010A2 xor ebp, ebp
.text:100010A4 xor edx, edx
.text:100010A6 repne scasb
.text:100010A8 not ecx
.text:100010AA dec ecx
.text:100010AB xor ebx, ebx
.text:100010AD mov eax, ecx
.text:100010AF mov ecx, ds:dword_1016BA40
.text:100010B5 cmp ecx, ebp
.text:100010B7 mov [esp+88h+var_7C], edx
.text:100010BB mov [esp+88h+var_70], eax
.text:100010BF mov [esp+88h+var_6C], ebx
.text:100010C3 jle loc_1000131F
;...
.text:10001313 mov eax, [esp+8Ch+var_7C] ; return value (case 1)
.text:10001317 pop esi
.text:10001318 pop edi
.text:10001319 pop ebp
.text:1000131A pop ebx
.text:1000131B add esp, 7Ch
.text:1000131E retn
.text:1000131F loc_1000131F:
.text:1000131F pop edi
.text:10001320 pop ebp
.text:10001321 mov eax, edx ; return value (case 2)
.text:10001323 pop ebx
.text:10001324 add esp, 7Ch
.text:10001327 retn
.text:10001327 GetIcMFC endp
I was interested in the arguments passed and the eventual returned value only.
Obviously there are three arguments arg_0, arg_4 and arg_8 and a DWORD return value.
Some executions later, I’ve found that arg_0 and arg_4 are memory buffers, while arg_8 is a DWORD/int value.
That’s enough information to tweak my implementation of GetIcMFC:
CDWORD DLL_EXPORT GetIcMFC(byte *arg_0, byte *arg_4, DWORD arg_8) {
return 0;
}
The program no longer crashes when I click the device select button, but the device select window doesn’t contain anything either:
Before digging deep into GetIcMFC and actually reverse engineer it, I’ve once again set breakpoints at the exports EPs, to get the complete exports call order.
After GetIcMFC, GetIcList and GetDllInfo were executed.
To obtain arguments and return values, I’ve proceed the same way like I did so far with GetIcMFC and the result was this:
C// Four arguments, and DWORD return value
DWORD DLL_EXPORT GetIcList(byte *arg_0, byte *arg_4, DWORD arg_8, DWORD arg_C) {
return 0;
}
// Two arguments, and DWORD return value
DWORD DLL_EXPORT GetDllInfo(byte *arg_0, byte *arg_4) {
return 0;
}
GetDllInfo looks short and simple, so I started with it:
C.text:100014E0 public GetDllInfo
.text:100014E0 GetDllInfo proc near
.text:100014E0 mov eax, [esp+arg_0]
.text:100014E4 mov edx, [esp+arg_4]
.text:100014E8 mov dword ptr [eax], 64h ; arg1
.text:100014EE mov ecx, ds:dword_1016BA40
.text:100014F4 mov [edx], ecx ; arg2
.text:100014F6 mov edx, ds:dword_1016BA40
.text:100014FC xor eax, eax ; zero EAX
.text:100014FE test edx, edx
.text:10001500 jle short locret_10001513
.text:10001502 push esi
.text:10001503 mov ecx, offset dword_10169228
.text:10001508 loc_10001508:
.text:10001508 mov esi, [ecx]
.text:1000150A add ecx, 4Ch
.text:1000150D add eax, esi
.text:1000150F dec edx
.text:10001510 jnz short loc_10001508
.text:10001512 pop esi
.text:10001513 locret_10001513:
.text:10001513 retn
.text:10001513 GetDllInfo endp
Both arguments are used as «out» parameters, and are set to 0x64 for arg_0 and pointer to dword_1016BA40 for arg_4.
That dword_1016BA40 is pointing to a constant value of 0x88, and after some research in the InfoIC’s guts I found out 0x88 is the total number of IC Manufacturers in the whole database.
Nice.
dword_10169228 is pointing to the MfcStru.mfc_ic_count value of the first Manufacturer, that pointer is increased by 0x4C and there’s an obvious loop between 10001508 and 10001513.
With a little more research it turned out that GetDllInfo iterates through the Manufacturers list and adds up their mfc_ic_count parameters.
The result is then returned and it’s used for the static «IC Total:» counter.
I have only one hardcoded Manufacturer with one IC, so I can set arg_4 to 1 (as one Manufacturer) and return 1 (as one IC) for now:
CDWORD DLL_EXPORT GetDllInfo(DWORD *arg_0, DWORD *arg_4) {
*arg_0 = 0x64;
*arg_4 = 0x01;
return 1;
}
The device select window now shows there’s one IC in the database. Good.
Next I took a look at GetIcMFC‘s guts. The function code is way to bulky to just paste it here.
After a hour or so in debugging, I was finally able to figure it out completely.
The function takes three arguments that at the end, I called «search«, «IDlist» and «type«.
search is the first argument, that holds the search word typed by the user inside the Device search field;
IDlist is used as return buffer, where the IDs of the Manufacturers, which ICs contains the user typed search word are stored;
type is the type of the IC, taken from the radio boxes — «ALL«, «ROM/FLASH/NVRAM«, «MCU/MPU«, «PLD/GAL/CPLD«, «SRAM/DRAM» or «Logic IC«
Basically, the idea of the function is to obtain a list of Manufacturers IDs (IDlist) as DWORD values in the buffer accepted as second argument.
If there’s a «type» chosen by the user, the manufacturers got filtered by that, and only manufacturers having IC’s of the chosen type are added to the list.
Same goes for the «search» argument, so only Manufacturers who’s ICs contain the search phrase are added to the list.
The return value is the numbers of the obtained manufacturers in the IDlist.
For now I will just return 1, as i have only one Manufacturer in my test list:
CDWORD DLL_EXPORT GetIcMFC(char *search, byte *IDlist, DWORD type) {
return 1;
}
The GetIcList function comes next and it’s quite similar to GetIcMFC.
It takes four parameters — search, IDlist, id and type.
The most significant difference is that, it has an «id» argument, that specifies which Manufacturer is about to get searched.
IDlist now holds the IDs of the ICs, that are again filtered by a «search» phrase and/or «type«.
The return value is the number of ICs in the IDlist.
Again, I will just return 1.
CDWORD DLL_EXPORT GetIcList(char *search, byte *IDlist, DWORD id, DWORD type) {
return 1;
}
I’m getting closer.
The last export function was GetIcStru.
I wasn’t able to find any call to this function in the main executable.
However the function itself is simple:
Assembly.text:10001050 GetIcStru proc near
.text:10001050
.text:10001050 arg_0 = dword ptr 4
.text:10001050 arg_4 = dword ptr 8
.text:10001050 arg_8 = dword ptr 0Ch
.text:10001050
.text:10001050 mov eax, [esp+arg_0] ; Manufacturer ID
.text:10001054 push esi
.text:10001055 push edi
.text:10001056 lea ecx, [eax+eax*8]
.text:10001059 lea edx, [eax+ecx*2] ; Manufacturer offset
.text:1000105C mov eax, [esp+8+arg_4] ; MfcStru.mfc_ic_struc
.text:10001060 test eax, eax
.text:10001062 mov esi, ds:off_10169224[edx*4] ; Manufacturer data
.text:10001069 jle short loc_10001074
.text:1000106B lea eax, [eax+eax*2]
.text:1000106E lea eax, [eax+eax*8] ; IC offset
.text:10001071 lea esi, [esi+eax*4] ; IC data
.text:10001074 loc_10001074:
.text:10001074 mov edi, [esp+8+arg_8]
.text:10001078 mov ecx, 1Bh
.text:1000107D rep movsd
.text:1000107F pop edi
.text:10001080 xor eax, eax ; Always return 0
.text:10001082 pop esi
.text:10001083 retn
.text:10001083 GetIcStru endp
That’s basically all the information I need, to do something useful from here. So I did.
Instead of using hardcoded database, I’ve made my own implementation of InfoIC.dll, that uses external and easy to edit XML file.
Though I didn’t reverse engineered the whole IC Structure format, I was able to push it to the point where you can easily change some of the IC information.
This is still work in progress, but you can download the attached DLL source, XML database and notes about the database format.
DOWNLOAD COMPLETE SOURCE, BUILDS AND XML
From quite some time already I got interested in the art of electronics and more specifically into hardware reverse engineering.
Since I’m mostly interested in the device’s firmware, I have to deal with EEPROM or Flash chips.
MiniPro turned out to be my weapon of choice for reading or programming memory chips.
However, sometimes the device I’m playing with, uses a chip that MiniPro doesn’t yet have in its database.
Unfortunately, MiniPro doesn’t use «user friendly» database for the supported chips and I’m left with no other option, than wait for the authors to _eventually_ add it into the database, or, alternatively, reverse engineer the database, and add whatever I want by myself.
The author choose a DLL file as a database — InfoIC.dll
Removing the DLL from the program folder leads to error message and program crash.
Something I should mention is that the program is really, really badly coded. There are a lot of places with obvious buffer overflows, and crashing the program instead of safely terminating it when the crucial DLL is not found, is the most obvious sign, about its code quality.
Whatever, lets dug into InfoIC.dll itself:
A hand full of export functions. Seems easy enough.
??0CInfoIC@@QAE@XZ, ??4CInfoIC@@QAEAAV0@ABV0@@Z and ?nInfoIC@@3HA are junk exports, so I’ll ignore them.
From the executable side, the important functions are initialized here:
Assembly.text:004424E2 push offset aInfoic_dll ; "infoIC.dll"
.text:004424E7 call ds:LoadLibraryA
.text:004424ED cmp eax, ebp
.text:004424EF mov hInstance, eax
.text:004424F4 jz loc_44259B
.text:004424FA mov edi, ds:GetProcAddress
.text:00442500 push offset aGeticstru ; "GetIcStru"
.text:00442505 push eax
.text:00442506 call edi ; GetProcAddress
.text:00442508 mov ecx, hInstance
.text:0044250E push offset aGeticmfc ; "GetIcMFC"
.text:00442513 push ecx
.text:00442514 mov _GetIcStru, eax
.text:00442519 call edi ; GetProcAddress
.text:0044251B mov edx, hInstance
.text:00442521 push offset aGeticlist ; "GetIcList"
.text:00442526 push edx
.text:00442527 mov _GetIcMFC, eax
.text:0044252C call edi ; GetProcAddress
.text:0044252E mov _GetIcList, eax
.text:00442533 mov eax, hInstance
.text:00442538 push offset aGetmfcstru ; "GetMfcStru"
.text:0044253D push eax
.text:0044253E call edi ; GetProcAddress
.text:00442540 mov ecx, hInstance
.text:00442546 push offset aGetdllinfo ; "GetDllInfo"
.text:0044254B push ecx
.text:0044254C mov _GetMfcStru, eax
.text:00442551 call edi ; GetProcAddress
.text:00442553 mov ecx, _GetIcStru
.text:00442559 mov _GetDllInfo, eax
.text:0044255E cmp ecx, ebp
.text:00442560 jz short loc_44257E
.text:00442562 cmp _GetIcMFC, ebp
.text:00442568 jz short loc_44257E
.text:0044256A cmp _GetIcList, ebp
.text:00442570 jz short loc_44257E
.text:00442572 cmp _GetMfcStru, ebp
.text:00442578 jz short loc_44257E
.text:0044257A cmp eax, ebp
.text:0044257C jnz short loc_442593
.text:0044257E loc_44257E:
.text:0044257E mov edx, hInstance
.text:00442584 push edx
.text:00442585 call ds:FreeLibrary
.text:0044258B mov hInstance, ebp
.text:00442591 jmp short loc_44259B
.text:00442593 loc_442593:
.text:00442593 cmp hInstance, ebp
.text:00442599 jnz short loc_4425A7
.text:0044259B loc_44259B:
.text:0044259B push ebp
.text:0044259C push ebp
.text:0044259D push offset aIcListDllFileE ; "IC List Dll file error!"
.text:004425A2 call sub_488284
So, it seems like this the only check that verifies if InfoIC.dll lib is valid or not.
I’ve compiled a DLL, containing the exports GetDllInfo, GetIcList, GetIcMFC, GetIcStru and GetMfcStru and made all of them as voids, with no arguments.
C#include <windows.h>
#define DLL_EXPORT __declspec(dllexport)
void DLL_EXPORT GetIcStru() { }
void DLL_EXPORT GetIcMFC() { }
void DLL_EXPORT GetIcList() { }
void DLL_EXPORT GetMfcStru() { }
void DLL_EXPORT GetDllInfo() { }
BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
switch (fdwReason) {
case DLL_PROCESS_ATTACH: break;
case DLL_PROCESS_DETACH: break;
case DLL_THREAD_ATTACH: break;
case DLL_THREAD_DETACH: break;
}
return TRUE;
}
Now the program no longer shows the warning message, but it crashed again.
The next thing I did, was to load MiniPro.exe in OllyDbg with its original InfoIC.dll, and set a breakpoint:
Assembly.text:004424E2 push offset aInfoic_dll ; "infoIC.dll"
.text:004424E7 call ds:LoadLibraryA ; here
.text:004424ED cmp eax, ebp
.text:004424EF mov hInstance, eax
.text:004424F4 jz loc_44259B
...
When the library is loaded, set breakpoints on the entry points of the exports and write down the execution order.
At execution, only GetMfcStru got called, so I’ve start the reverse engineering here:
Assembly.text:10001020 public GetMfcStru
.text:10001020 GetMfcStru proc near
.text:10001020
.text:10001020 arg_0 = dword ptr 4
.text:10001020 arg_4 = dword ptr 8
.text:10001020
.text:10001020 mov eax, [esp+arg_0] ; Manufacturer ID
.text:10001024 push esi
.text:10001025 push edi
.text:10001026 mov edi, [esp+8+arg_4] ; memcpy : destination address
.text:1000102A lea ecx, [eax+eax*8] ; / calculate offset
.text:1000102D lea edx, [eax+ecx*2] ;
.text:10001030 mov ecx, 13h ; memcpy : number of DWORDs to copy
.text:10001035 xor eax, eax ; return 0
.text:10001037 lea esi, unk_101691E0[edx*4] ; memcpy : source address
.text:1000103E rep movsd ; memcpy
.text:10001040 pop edi
.text:10001041 pop esi
.text:10001042 retn
.text:10001042 GetMfcStru endp
The program obviously accept two arguments — arg_0 and arg_4. The rest is simply a memcpy() implementation, copying a piece of data from address of the DLL to a buffer provided as arg_4 based on a offset provided by arg_0.
Knowing the size of the copied buffer (0x13 DWORDs), I’ve took some data from unk_101691E0:
InfoIC.dllOffset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 001691E0 00 00 00 00 65 00 00 00 41 43 45 00 00 00 00 00 ....e...ACE..... 001691F0 00 00 00 00 00 00 00 00 00 00 00 00 41 43 45 20 ............ACE 00169200 54 65 63 68 6E 6F 6C 6F 67 79 00 00 00 00 00 00 Technology...... 00169210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00169220 00 00 00 00 B0 47 04 10 47 00 00 00 ....�G..G...
It looks like some pretty simple structure, and after some research back and forward through main executable and DLL, I was able to obtain a valid structure:
Ctypedef struct MfcStru {
DWORD mfc_id; // ID of the Manufacturer
DWORD mfc_logo; // Manufacturer logo ID. Logos are hardcoded as BMP resources into the DLL
char mfc_name_short[20]; // Short manufacturer name (eg. "ATMEL", "ALI", etc.)
char mfc_name_full[40]; // Full manufacturer name (eg. "Atmel Corporation", "Acer Laboratories Inc", etc.)
byte* mfc_ic_struc; // Pointer to the ICs structures buffer
DWORD mfc_ic_count; // Number of ICs for this manufacturer
} MfcStru;
Having this information, I’ve updated my DLL like so:
Cvoid DLL_EXPORT GetMfcStru(DWORD id, byte *result) {
MfcStru Mfc = {0, 0, "TEST (short)", "TEST (long)", NULL, 0};
memcpy(result, &Mfc, sizeof(MfcStru));
}
Executing it as-is, again crashed the program here:
Assembly00461DC9 |. 8D4424 00 LEA EAX,DWORD PTR SS:[ESP] ; ESP is holding the result
00461DCD |. 56 PUSH ESI
00461DCE |. 57 PUSH EDI
00461DCF |. 50 PUSH EAX ; result
00461DD0 |. 51 PUSH ECX ; id
00461DD1 |. FF15 B0CB5200 CALL DWORD PTR DS:[52CBB0] ; call to GetMfcStru
00461DD7 |. A1 18C75200 MOV EAX,DWORD PTR DS:[52C718] ; EAX = 0, as iterator for MfcStru.mfc_ic_struc
00461DDC |. 83C4 08 ADD ESP,8
00461DDF |. 8D0440 LEA EAX,DWORD PTR DS:[EAX+EAX*2]
00461DE2 |. 8D14C0 LEA EDX,DWORD PTR DS:[EAX+EAX*8]
00461DE5 |. 8B4424 4C MOV EAX,DWORD PTR SS:[ESP+4C] ; points to MfcStru.mfc_ic_struc
00461DE9 |. 8A0C90 MOV CL,BYTE PTR DS:[EAX+EDX*4] ; crash occurs here
I can easily calculate the size of MfcStru.mfc_ic_struc structure like so:
if, EAX = 1 (eg. second entry, since the first is positioned at 0)
1+1*2 = 3;
3+3*8 = 27;
Because those are DWORDs, 27*4 gives me 108 or 0x06C as final size in bytes for MfcStru.mfc_ic_struc entry.
The starting address is basically MfcStru.mfc_ic_struc value 0x100447B0, minus the DLL image size 0x10000000, or simply 0x000447B0:
InfoIC.dllOffset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 000447B0 01 00 00 00 00 00 00 00 01 00 00 00 41 43 45 32 ............ACE2 000447C0 34 43 30 32 41 00 00 00 00 00 00 00 00 00 00 00 4C02A........... 000447D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 000447E0 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 ................ 000447F0 00 00 00 00 00 00 80 00 08 00 00 00 08 00 00 00 ......�......... 00044800 10 27 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .'.............. 00044810 00 00 00 00 00 00 00 08 80 00 00 00 ........�...
So, what I did next was to put those bytes in a buffer, assign it to MfcStru.mfc_ic_struc and set the MfcStru.mfc_ic_count to 1, as if there’s only one entry in the IC database.
Cbyte ic_struc[] = "x01x00x00x00x00x00x00x00x01x00x00x00x41x43x45x32"
"x34x43x30x32x41x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x01x00x00x00x00x00x00"
"x00x00x00x00x00x00x80x00x08x00x00x00x08x00x00x00"
"x10x27x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x08x80x00x00x00";
void DLL_EXPORT GetMfcStru(DWORD id, byte *result) {
MfcStru Mfc = {0, 0, "TEST (short)", "TEST (long)", ic_struc, 1};
memcpy(result, &Mfc, sizeof(MfcStru));
}
Alright, the program no longer crashes on execution.
However, clicking on the button for Device select, still crashes it.
Same way as before, I’ve set breakpoints to the export functions entry points, clicked the button and it turned out, now GetIcMFC is executed.
Stepping over it, crashes the program, so I took a look what happens inside the original InfoIC.dll:
Assembly.text:10001090 public GetIcMFC
.text:10001090 GetIcMFC proc near
.text:10001090
;...
.text:10001090 arg_0 = dword ptr 4
.text:10001090 arg_4 = dword ptr 8
.text:10001090 arg_8 = dword ptr 0Ch
.text:10001090
.text:10001090 sub esp, 7Ch
.text:10001093 push ebx
.text:10001094 push ebp
.text:10001095 push edi
.text:10001096 mov edi, [esp+88h+arg_0]
.text:1000109D or ecx, 0FFFFFFFFh
.text:100010A0 xor eax, eax
.text:100010A2 xor ebp, ebp
.text:100010A4 xor edx, edx
.text:100010A6 repne scasb
.text:100010A8 not ecx
.text:100010AA dec ecx
.text:100010AB xor ebx, ebx
.text:100010AD mov eax, ecx
.text:100010AF mov ecx, ds:dword_1016BA40
.text:100010B5 cmp ecx, ebp
.text:100010B7 mov [esp+88h+var_7C], edx
.text:100010BB mov [esp+88h+var_70], eax
.text:100010BF mov [esp+88h+var_6C], ebx
.text:100010C3 jle loc_1000131F
;...
.text:10001313 mov eax, [esp+8Ch+var_7C] ; return value (case 1)
.text:10001317 pop esi
.text:10001318 pop edi
.text:10001319 pop ebp
.text:1000131A pop ebx
.text:1000131B add esp, 7Ch
.text:1000131E retn
.text:1000131F loc_1000131F:
.text:1000131F pop edi
.text:10001320 pop ebp
.text:10001321 mov eax, edx ; return value (case 2)
.text:10001323 pop ebx
.text:10001324 add esp, 7Ch
.text:10001327 retn
.text:10001327 GetIcMFC endp
I was interested in the arguments passed and the eventual returned value only.
Obviously there are three arguments arg_0, arg_4 and arg_8 and a DWORD return value.
Some executions later, I’ve found that arg_0 and arg_4 are memory buffers, while arg_8 is a DWORD/int value.
That’s enough information to tweak my implementation of GetIcMFC:
CDWORD DLL_EXPORT GetIcMFC(byte *arg_0, byte *arg_4, DWORD arg_8) {
return 0;
}
The program no longer crashes when I click the device select button, but the device select window doesn’t contain anything either:
Before digging deep into GetIcMFC and actually reverse engineer it, I’ve once again set breakpoints at the exports EPs, to get the complete exports call order.
After GetIcMFC, GetIcList and GetDllInfo were executed.
To obtain arguments and return values, I’ve proceed the same way like I did so far with GetIcMFC and the result was this:
C// Four arguments, and DWORD return value
DWORD DLL_EXPORT GetIcList(byte *arg_0, byte *arg_4, DWORD arg_8, DWORD arg_C) {
return 0;
}
// Two arguments, and DWORD return value
DWORD DLL_EXPORT GetDllInfo(byte *arg_0, byte *arg_4) {
return 0;
}
GetDllInfo looks short and simple, so I started with it:
C.text:100014E0 public GetDllInfo
.text:100014E0 GetDllInfo proc near
.text:100014E0 mov eax, [esp+arg_0]
.text:100014E4 mov edx, [esp+arg_4]
.text:100014E8 mov dword ptr [eax], 64h ; arg1
.text:100014EE mov ecx, ds:dword_1016BA40
.text:100014F4 mov [edx], ecx ; arg2
.text:100014F6 mov edx, ds:dword_1016BA40
.text:100014FC xor eax, eax ; zero EAX
.text:100014FE test edx, edx
.text:10001500 jle short locret_10001513
.text:10001502 push esi
.text:10001503 mov ecx, offset dword_10169228
.text:10001508 loc_10001508:
.text:10001508 mov esi, [ecx]
.text:1000150A add ecx, 4Ch
.text:1000150D add eax, esi
.text:1000150F dec edx
.text:10001510 jnz short loc_10001508
.text:10001512 pop esi
.text:10001513 locret_10001513:
.text:10001513 retn
.text:10001513 GetDllInfo endp
Both arguments are used as «out» parameters, and are set to 0x64 for arg_0 and pointer to dword_1016BA40 for arg_4.
That dword_1016BA40 is pointing to a constant value of 0x88, and after some research in the InfoIC’s guts I found out 0x88 is the total number of IC Manufacturers in the whole database.
Nice.
dword_10169228 is pointing to the MfcStru.mfc_ic_count value of the first Manufacturer, that pointer is increased by 0x4C and there’s an obvious loop between 10001508 and 10001513.
With a little more research it turned out that GetDllInfo iterates through the Manufacturers list and adds up their mfc_ic_count parameters.
The result is then returned and it’s used for the static «IC Total:» counter.
I have only one hardcoded Manufacturer with one IC, so I can set arg_4 to 1 (as one Manufacturer) and return 1 (as one IC) for now:
CDWORD DLL_EXPORT GetDllInfo(DWORD *arg_0, DWORD *arg_4) {
*arg_0 = 0x64;
*arg_4 = 0x01;
return 1;
}
The device select window now shows there’s one IC in the database. Good.
Next I took a look at GetIcMFC‘s guts. The function code is way to bulky to just paste it here.
After a hour or so in debugging, I was finally able to figure it out completely.
The function takes three arguments that at the end, I called «search«, «IDlist» and «type«.
search is the first argument, that holds the search word typed by the user inside the Device search field;
IDlist is used as return buffer, where the IDs of the Manufacturers, which ICs contains the user typed search word are stored;
type is the type of the IC, taken from the radio boxes — «ALL«, «ROM/FLASH/NVRAM«, «MCU/MPU«, «PLD/GAL/CPLD«, «SRAM/DRAM» or «Logic IC«
Basically, the idea of the function is to obtain a list of Manufacturers IDs (IDlist) as DWORD values in the buffer accepted as second argument.
If there’s a «type» chosen by the user, the manufacturers got filtered by that, and only manufacturers having IC’s of the chosen type are added to the list.
Same goes for the «search» argument, so only Manufacturers who’s ICs contain the search phrase are added to the list.
The return value is the numbers of the obtained manufacturers in the IDlist.
For now I will just return 1, as i have only one Manufacturer in my test list:
CDWORD DLL_EXPORT GetIcMFC(char *search, byte *IDlist, DWORD type) {
return 1;
}
The GetIcList function comes next and it’s quite similar to GetIcMFC.
It takes four parameters — search, IDlist, id and type.
The most significant difference is that, it has an «id» argument, that specifies which Manufacturer is about to get searched.
IDlist now holds the IDs of the ICs, that are again filtered by a «search» phrase and/or «type«.
The return value is the number of ICs in the IDlist.
Again, I will just return 1.
CDWORD DLL_EXPORT GetIcList(char *search, byte *IDlist, DWORD id, DWORD type) {
return 1;
}
I’m getting closer.
The last export function was GetIcStru.
I wasn’t able to find any call to this function in the main executable.
However the function itself is simple:
Assembly.text:10001050 GetIcStru proc near
.text:10001050
.text:10001050 arg_0 = dword ptr 4
.text:10001050 arg_4 = dword ptr 8
.text:10001050 arg_8 = dword ptr 0Ch
.text:10001050
.text:10001050 mov eax, [esp+arg_0] ; Manufacturer ID
.text:10001054 push esi
.text:10001055 push edi
.text:10001056 lea ecx, [eax+eax*8]
.text:10001059 lea edx, [eax+ecx*2] ; Manufacturer offset
.text:1000105C mov eax, [esp+8+arg_4] ; MfcStru.mfc_ic_struc
.text:10001060 test eax, eax
.text:10001062 mov esi, ds:off_10169224[edx*4] ; Manufacturer data
.text:10001069 jle short loc_10001074
.text:1000106B lea eax, [eax+eax*2]
.text:1000106E lea eax, [eax+eax*8] ; IC offset
.text:10001071 lea esi, [esi+eax*4] ; IC data
.text:10001074 loc_10001074:
.text:10001074 mov edi, [esp+8+arg_8]
.text:10001078 mov ecx, 1Bh
.text:1000107D rep movsd
.text:1000107F pop edi
.text:10001080 xor eax, eax ; Always return 0
.text:10001082 pop esi
.text:10001083 retn
.text:10001083 GetIcStru endp
That’s basically all the information I need, to do something useful from here. So I did.
Instead of using hardcoded database, I’ve made my own implementation of InfoIC.dll, that uses external and easy to edit XML file.
Though I didn’t reverse engineered the whole IC Structure format, I was able to push it to the point where you can easily change some of the IC information.
This is still work in progress, but you can download the attached DLL source, XML database and notes about the database format.
DOWNLOAD COMPLETE SOURCE, BUILDS AND XML
В статье мы опишем все возможные способы, как исправить ошибки DLL Windows 7, 10. Исправление msvcp140 dll, msvcp110 dll, kernelbase dll, comctl32 и других.
DLL – это файлы системных библиотек в Windows. Формально они являются исполняемыми, но запустить их по отдельности не получится. Библиотеки используются другими программами для выполнения стандартных функций сохранения, удаления, печати.
К примеру, когда в одной из программ вы запускаете опцию печати, приложение автоматически подгружает отвечающий за эту функцию файл DLL. Иногда в процессе работы программы появляются системные сообщения о том, что произошла неполадка в работе файла библиотеки. После этого приложение завершает свою работу или вы не можете выполнить определенную функцию. Далее рассмотрим все возможные способы, как исправить ошибки DLL Windows 7, 10. Схема действий одинакова для всех версий ОС.
Причины ошибок в работе библиотек DLL Windows
Так как каждая библиотека отвечает за конкретную функцию, причина ошибки зависит от того, какой файл DLL не отвечает. Наиболее частая неполадка происходит с Windows.dll – это главная системная библиотека, отвечающая за запуск всех приложений и самой операционной системы.
Существуют следующие типы ошибок DLL:
- «Файл не найден». Возможно, вы удалили нужную библиотеку, переименовали или переместили её в другое место на жестком диске;
- «Файл отсутствует». Такое сообщение появляется в том случае, если система не может найти нужный объект на диске и часто причиной такой ошибки является работа вредоносного ПО, которое заменило программный код в библиотеке;
- «Нарушение прав доступа к файлу». С этим типом неполадки пользователи сталкиваются при попытке включения игры. Вместо запуска работ ПО система выдает сообщение о невозможности получения доступа к библиотеке. К примеру, «ошибка msvcr100 DLL»;
- «DLL не удалось зарегистрировать» — это означает, что произошла фатальная ошибка при установке приложения. Устранить неполадку поможет повторная инсталляция игры.
Большинство ошибок DLL в Windows появляется из-за установки пиратской версии ОС. Как правило, в модифицированных сборках используются вредоносные библиотеки, с которыми не могут взаимодействовать другие приложения. Если вы используете неофициальную версию Виндовс, советуем скачать на сайте Microsoft.com оригинальную копию образа ОС и установить её на свой компьютер.
Другие причины появления проблем с файлами DLL:
- Случайное удаление файла. Часто при попытке очистить жесткий диск Windows от ненужных файлов пользователи по незнанию удаляют файлы библиотек. Также, деинсталлировать файл может другая программа (вредоносное ПО или утилита для автоматической очистки диска);
- Отказ оборудования. Если для установки или запуска игры вы используете оптический диск и дисковод, при некачественном материале одного из компонентов может появиться фатальная ошибка, которая повреждает файл запуска с расширением DLL;
- В системе не установлены последние обновления. Разработчики из Майкрософт всегда рекомендуют устанавливать новейшие апдейты ОС. Это позволяет избавиться от проблем не только с библиотеками, но и с ошибками, которые они провоцируют. Также, обновления защищают систему. Она становиться менее подвержена действию вирусов;
- Проблемы с драйверами. Когда для конкретной программы или внешнего устройства, которое она использует, не установлены последние версии драйверов, пользователь сталкивается со всевозможными ошибками ОС. Одной из таких проблем может стать ошибка msvcp120 – система не может открыть приложение из-за фатальной ошибки совместимости;
- Несовместимость технических требований игры и характеристик компьютера. В таком случае, нужно выбрать другую более старую версию приложения и переустановить его или же обновить используемую сборку ОС.
Способ 1 — Ошибочное удаление файла DLL
Если после открытия приложения ничего не происходит, а через несколько секунд появляется сообщение «ошибка msvcr100 DLL» или «ошибка msvcp120 DLL», это означает, что на компьютере нет нужной библиотеки. Возможно, она не была установлена вместе с ОС или файл был удален другой программой.
Системное окно с ошибкой выглядит следующим образом:
Если вы столкнулись с такой проблемой, для начала рекомендуем открыть папку жесткого диска С и в графе поиска вписать название нужного DLL. Часто библиотека просто перемещена в другую папку. Исправить проблему поможет её помещение в директорию CWindowsSystem32 (для 32-х разрядный версий ОС) или в CWindowsSysWoW64 (для 64-х разрядных сборок).
В случае, если на диске «С» вы не нашли нужный файл, на сайте Майкрософт нужно скачать апдейт для программного пакета Visual C++ 2013. Эта утилита настраивает взаимодействие всех системных файлов и исправляет существующие ошибки.
Для скачивания пакета перейдите по ссылке https://support.microsoft.com/ru-ru/help/3179560/update-for-visual-c-2013-and-visual-c-redistributable-package, в таблице выберите свою страну и язык, а затем кликните на ссылке для скачивания.
После инсталляции обновления перезагрузите компьютер и попробуйте повторно запустить программу. Если этот вариант решение не помог, переходите к следующему методу.
Способ как исправить ошибки DLL – Регистрация библиотеки вручную
Бывают случаи, когда нужна библиотека есть на компьютере пользователя и находится в правильной папке, но программа все равно её «не видит». После установки пакета обновления Visual C++, как правило, тоже ничего не происходит. Как быть в этом случае?
Исправить такую ошибку DLL в Windows 10 и Windows 7 поможет регистрация библиотеки на сервере Майкрософт. Скорее всего, на вашем компьютере установлена корректная версия DLL, но из-за проблем со связью копии ОС и сервером разработчика возникают подобного рода проблемы.
Пользователь может самостоятельно запустить работу службы регистрации и менее чем за 1 минуту добавить существующую библиотеку в список «пригодных» для использования файлов.
Следуйте инструкции:
- Одновременно нажмите на клавиши Win+R для открытия окна «Выполнить»;
- Теперь в текстовом поле введите «CMD» и подтвердите действие;
- В результате, откроется окно командной строки, с помощью которого и будет проводиться регистрация библиотеки. В новой строке введите указанную на рисунке ниже команду. Изменяйте название библиотеке в зависимости от того, какое её имя указано в ошибка запуска приложения.
Важно! Для выполнения регистрации вы должны быть авторизованы в учетной записи администратора системы и компьютер необходимо подключить к интернету.
Способ 3 — Запуск среды восстановления
Еще один способ быстрого исправления всех ошибок системы – это использование утилиты восстановления. Запустить нужное окно можно с помощью среды Виндовс. Откройте окно параметров нажатием клавиш Win-I.
Затем откройте вкладку «Обновление и безопасность»«Восстановление». В правой части окна промотайте страничку вниз и в разделе «Особые варианты загрузки» кликните на «Перезагрузить сейчас».
Заметьте! В этом же окне вы можете сбросить настройки ОС к заводским параметрам. Если вы хотите полностью восстановить систему и готовы к удалению все программ и файлов, выбирайте этот пункт. С его помощью есть больше шансов навсегда избавиться от ошибок, которые связан с системными библиотеками.
После выбора особых вариантов загрузки и повторного запуска компьютера вы увидите не рабочий стол системы, а специальное окно Troubleshooting (решение неполадок). Кликните на указанную ниже плитку, чтобы запустить автоматическое сканирование и исправление:
После повторной перезагрузки ОС система ошибки будут исправлены. Пользовательские файлы удалены не будут.
Владельцам Windows 7 недоступна возможность автоматического исправления в режиме перезагрузки, но можно запустить встроенную утилиту диагностики. Для этого зайдите в окно панели управления и в строке поиска введите «Средство проверки». Кликните на первый результат поисковой выдачи.
Следуйте инструкции в окне встроенного помощника для выявления проблем и их исправления:
Способ 4 — Установка отсутствующих DLL и обновление программ
Ранее м уже рассмотрели варианты восстановления ошибочных библиотек. Однако, если в Windows XP, 7, 10 возникла ошибка Kernel32 DLL, рекомендуется переустановить файл вручную. Рассмотрим, как исправить такого рода неполадку.
На веб-сайте разработчика пользователи могут только загрузить пакет программ для комплексного восстановления системных файлов. Если же ваша ОС работает нормально, а проблемы возникли только с одной библиотекой, рекомендуется найти в сети и скачать на компьютер нужный файл вручную.
В интернете есть масса сайтов, предлагающих скачать копии DLL, с проблемами которых пользователи сталкиваются чаще всего. Важно помнить, что не следует ничего скачивать из подозрительных ресурсов, а перед помещением файла в системную папку его нужно обязательно просканировать встроенным брандмауэром и еще одним усыновленным в системе антивирусом. Это поможет избавиться от дальнейших неполадок, если библиотека окажется вирусной.
Среди надежных ресурсов для скачивания системных DLL можно выделить:
- DLL.ru;
- Dll-files.ru;
- Download-dll.ru.
Пользователю необходимо ввести имя недостающей библиотеки и начать её скачивание. Далее поместите полученный файл в системную папку System32 или SysWOW64, в зависимости от разрядности установленной копии ОС. При следующем открытии программы ошибка исчезнет.
Также, рекомендуем обновить программу, с которой возникли неполадки. Часто даже после многократной замены файла библиотеки не удается избавиться от ошибок запуска или работы программы. Это говорит о ом, что в системе установлена несовместимая версия игры или прикладного приложения.
Способ 5 — Переустановка приложения
Еще один способ решения – это простая переустановка программы. Возможно, после возникновения проблем с DLL утилита не «видит» нового файла библиотеки, потому необходимо деинсталлировать программу.
Удаляйте приложения только через окно Панель управления — Установка и удаление программ. После деинсталляции советуем также поискать на диске «С» папки с названием игры, которые могли быть не удалены. Затем перезагрузите компьютер, установите ПО ее раз и попробуйте запустить его. Новая библиотека должна распознаться без проблем.
Способ 6 — Обновление драйверного ПО
Обновление драйверного ПО позволяет устранить ошибки несовместимости установленных программ, аппаратного оборудования и операционной системы. Рассмотрим, как исправить ошибку HAL DLL в Windows 7, 10, ведь именно этот тип неполадки появляется из-за несовместимости компонентов.
Необходимо установить последние обновления для всех компонентов ОС. Зайдите в Диспетчер задач Виндовс. В седьмой версии это можно сделать с помощью окна панели управления, в десятой версии нужно воспользоваться окном поиска по системе.
В окне Диспетчера кликните правой кнопкой мышки на названии компьютера, а затем выберите поле «Обновить конфигурацию». Для установки новых версий драйверов на компьютере должно быть установлено соединение с интернетом.
Способ 7 — Удаление вирусов
Просканируйте систему встроенным Защитником или другим установленным антивирусом. Если в результате сканирования обнаружится, что вирус — это и есть ошибочная библиотека, удалите её с компьютера и загрузите пакет обновления Visual C++ на сайте Майкрософт.
Теперь вы знаете, как быстро исправить ошибки DLL в Windows 10 и Windows 7. Если у вас остались вопросы по восстановлению DLL, оставляйте их в комментариях.
Ошибка dll возникает в результате отсутствия или повреждения файла с расширением .dll. В этом нет ничего страшного. Если коротко и не вдаваясь в лишние подробности, dll — это динамически подключаемая библиотека.
И как показывает практика, некоторые программы требуют установки тех dll, которые не входят в стандартную библиотеку Windows. А теперь хотел бы привести наглядный пример, связанный с ошибкой dll.
Когда я попытался открыть полезную программу HTML Color2000, то в результате получил такое сообщение:
Как видим из скриншота, у меня отсутствовал файл MSVBVM50.DLL. После второй и третьей переустановки программы (как нам советует этот помощник) проблема оставалась не разрешенной.
После этого я нашел сайт специально для скачивания разных .dll расширений.
Официальный сайт: http://www.dll-files.com
Использовать сайт очень просто и главное — бесплатно. Это тоже самое, что и библиотека, только для нужной цели.
Пункт 1. Находим нужный файл. Поиск по базе файлов dll либо в алфавитном порядке:
или можем воспользоваться поиском. При этом вводим имя проблемного файла и жмем на кнопку search. Поиск довольно-таки умен и может сразу предложить нам правильный вариант:
Если все ок, перед нами появляется запрашиваемый файл. А в самом низу имеются 2 кнопочки:
Пункт 2. Загружаем файл. Мы жмем на Download zip-file потому, что этот процесс займет меньше времени и усилий с нашей стороны. Проверено на личном опыте.
Пункт 3. Помещаем файл в нужное место. Мы должны зайти в свой системный диск. Скорее всего это Диск С. Далее находим папку Windows и папку system32. Затем после того, как мы распаковали наш архив с файлом dll, можно перемещать его к остальным библиотечным файлам:
Все готово! Пользуемся плодами своего труда. Теперь можно повторно открыть нашу программу, у которой была эта ошибка и она откроется.
Далее речь пойдет о расширенных возможностях сайта. Вы видели из скриншота, что имеется также программа с названием MSVBVM50.DLL FIXER. Что это за программа и почему она есть?
DLL-FILES.COM FIXER (полное название программы) — это платная программа, которая стоит всего 29,95$. Вариантов оплаты много, кроме платежной системы Webmoney, здесь есть Visa, MasterCard, PayPal и другие платежные системы. Вот кстати скрин:
Преимущества платной версии таковы:
- Исправление всех проблем DLL файл за один раз.
- Сканирование по расписанию и ремонт вашего реестра Windows.
- Защита приложений и ПК от сбоев системы.
- Ускорение компьютера и операционной системы.
- Остановка нежелательной системы оповещения.
В целом эта программа исправляет ошибку, связанную с отсутствием файлов dll. Когда я ее запустил, она через короткое время поздравила меня с тем, что нужный MSVBVM50.DLL файл установлен. Делает она это БЕСПЛАТНО! Но вот другие возможности программы — это уже за дополнительные 30$ без 5-ти центов.
Ошибка реестра: насколько это серьезно
У меня было обнаружено всего 170 ошибок. В основном это ошибки COM и ActiveX. Как говорит программа, эти ошибки так или иначе, связанны с этими понятиями. Я поискал в Интернете и нашел следующее:
ActiveX — это разработка известной компании Microsoft, предназначение которого через Интернет распространять различное ПО. Программы, которые созданы благодаря технологии ActiveX, они могут быть встроены в обычные веб-страницы и выполнять разнообразные функции.
Как исправить ошибку dll
Как мы видим, эти ошибки могут снижать производительность ПК. Поэтому принял решение поискать какое-нибудь альтернативное решение для чистки и исправления ошибок реестра.
Существует масса программ по этой тематике. Но я в данном случае ориентировался на легкость программы и ее бесплатность. Выбор пал на бесплатную программу по названием Registry Life.
Как исправить ошибки в реестре
Реестр нашего компьютера должен быть в хорошем состоянии, чтобы работоспособность оставалась на высоком уровне. Кроме того, засоренный реестр вызывает всевозможные ошибки и торможение системы в целом.
Итак, для лечения реестра будем использовать программу Registry Life.
Скачать программу можно здесь: http://www.softportal.com/software-13793-registry-life.html
Вот скрин программы Registry Life:
1. Чистка реестра
Для того, чтобы исправить проблемы реестра, нужно нажать кнопку «Запустить чистку реестра» и «Далее».
У меня было найдено 88 проблем, связанных с реестром. Программа Registry Life написала следующее:
Найдены проблемы в реестре. Проверка завершена. Ниже показаны разделы реестра, содержащие ошибки. Чтобы увидеть неверные записи в каком-либо из разделов реестра, дважды кликните по нему.
- 88 проблем найдено в разделах реестра;
- Ассоциации типов файлов: 10 проблем;
- Общие библиотеки: 12 проблем;
- Пользовательские настройки программ: 54 проблемы;
- Наборы управляющих параметров: 12 проблем;
- Показать неверные записи (для опытных пользователей).
Мы жмем на кнопку исправить. И все готово!
2. Оптимизация реестра
Этот инструмент физически оптимизирует файлы, в которых записан системный реестр. Эта процедура позволяет повысить производительность системы. В ходе ее выполнения файлы реестра будут дефрагментированы и сжаты. Программа проанализирует системный реестр и выполнит его оптимизацию.
Внимание! Необходимо закрыть все другие работающие приложения и отключить антивирусные программы перед началом оптимизации. А сразу после оптимизации потребуется перезагрузка системы.
Мы просто жмем на кнопочку «Выполнить оптимизацию реестра» и перезагружаем наш Windows. Все готово!
Заключение
Можно использовать различные инструменты для устранения ошибок, связанных с dll файлами. Я считаю этот вариант наиболее оптимальным. Но это лишь мое мнение. Главное — не паниковать. Система выдает нам какую-то ошибку, мы смотрим что там написано, вводим в поиск, устанавливаем.
Если все плохо — чистим и оптимизируем реестр. Вам я желаю успехов в этом деле. Если что не понятно, спрашивайте. Чем сможем, поможем.
Понравился пост? Нажми любую кнопку:
В этой статье мы разберем что такое DLL-файлы и возможные причины ошибок при их выполнении в Windows 7, 8, 10/
DLL – это файлы, которые принадлежат системным библиотекам, и формально считаются исполняемыми. Однако запустить самостоятельно их невозможно. Они используются для выполнения стандартных задач операционной системы, таких как запуск программ, удаление, сохранение, печать и прочее.
Разберем на примере: Вам нужно распечатать документ Word. Вы выбираете функцию «Печать», и для выполнения этой операции из системной библиотеки выгружается соответствующий файл DLL, который управляет функциями печати. Но в процессе выполнения могут возникнуть ошибки разного рода (причины их появления будут описаны далее) из-за чего программа прекращает работу и не дает завершить процесс до конца.
Причины ошибок в работе библиотек
Каждый отдельный DLL отвечает за выполнение конкретной функции, и источник проблемы зависит от того, с каким именно файлом возникли неполадки. Как показывает практика, наиболее распространённые ошибки касаются файла Windows.dll – главной системной библиотеки. Он отвечает за запуск всех установленных приложений и операционной системы в целом.
В зависимости от сообщения, которое свидетельствует о завершении работы функции, можно судить о причинах возникновения ошибки:
- «Файл не найден» — означает, что нужная библиотека была удалена (случайно или вредоносным ПО) или была перемещена в другую директорию.
- «Файл отсутствует» свидетельствует о том, что системе не удалось найти необходимый файл в нужной папке. Часто за такой ошибкой стоят вирусы, заменяющие исходные коды библиотек.
- «Нарушение прав доступа к файлу» — сообщение, знакомое большинству геймеров, так как чаще всего оно появляется после неудачной попытки запустить игру. В таком случае вместо выполнения заданной операции, ОС тщетно пытается «выгрузить» необходимый DLL из библиотеки, однако не получает в нее доступа.
- «DLL не удалось зарегистрировать» указывает на то, что программа (или игра, что вероятнее) была установлена некорректно. Решить фатальную ошибку поможет полная деинсталляция, а потом повторная установка приложения.
Чаще всего неполадки с DLL файлами происходят у тех, кто используют неофициальные версии ОС Windows. Пиратские версии используют модифицированные «проблемные» библиотеки, которые не могут нормально взаимодействовать с другим программным обеспечением и утилитами. Решить это может замена пиратской версии операционной системы на лицензионную, или, как минимум, инсталляция оригинальной копии образца сертифицированной ОС. Найти ее можно на сайте Microsoft.com.
Существуют и другие причины появления ошибок такого рода:
- Несовместимость технических требований установленного приложения и возможностей компьютера. Можно попытаться скачать более ранние версии программы, или обновить сборку операционной системы.
- Устаревшие драйверы также могут затормозить выполнение операций. Если для запуска необходимы «свежие» драйвера, которые отсутствуют на устройстве, задача не будет выполнена из-за целого ряда ошибок. Предупредить эту проблему поможет своевременное обновление «дров» вручную, или автоматически при помощи специальных утилит.
- Аппаратные неполадки, как, например, поломка дисковода с последующей невозможностью корректного чтения оптических носителей, тоже может повредить DLL файл, отвечающий за его нормальную работу.
- Наряду с устаревшими драйверами, много хлопот может доставить и неактуальная версия операционной системы Windows. Все обновления для оригинальных продуктов предоставляются бесплатно. Сами разработчики ОС настоятельно рекомендуют регулярно обновлять систему. Это не только избавит от «торможений» и ошибок, но и поможет защитить ее от вредоносного ПО.
- Имеет место быть и случайное удаление. Часто неопытные пользователи в попытках расширить свободное пространство на жестком диске, не разобравшись, удаляют десятки файлов, среди которых может оказаться и DLL-файл.
Способы устранения ошибок
Есть несколько способов устранения ошибок. Большинство из них универсальны, но некоторые будут эффективны только в конкретных ситуациях.
Ошибочное удаление исполнительного файла
При запуске приложений об отсутствии нужной библиотеки в директории будет свидетельствовать сообщение об ошибках msvcr100 DLL или msvcp120 DLL. Есть вероятность того, что они просто не установились в комплекте вместе с ОС, были удалены вручную или сторонними программами.
Для начала необходимо провести небольшую диагностику. В строке поиска (она находится в разделе «Пуск») нужно вписать название искомого файла. В большинстве случаев это дает положительный результат, так как нередко такие файлы находятся в неправильных папках. Если поиск увенчался успехом, найденный DLL нужно переместить обратно в нужное хранилище по адресу:
- CWindowsSystem32 (для ОС в 32-битных версиях)
- Или в CWindowsSysWoW64 (для 64-разрядных ОС).
Если файл не удалось найти, восстановить корректную работу системы поможет обновление программного пакета от Microsoft – Visual C++ последней версии. Он наладит работу всех системных файлов и исправит возникшие и потенциальные ошибки.
Самостоятельная регистрация библиотеки
Этот метод подойдет для частого случая, когда нужный системный файл находится в правильном месте, но система по своим причинам все равно его «не видит» или не может найти. Исходя из практики, можно сразу сказать, что апдейт программного пакета не даст никаких результатов, и придется перейти к более серьезным мерам.
В такой ситуации, нужную библиотеку придется зарегистрировать на сервере вручную. Удалять или перемещать DLL файл не нужно. С высокой вероятностью с ним все нормально, а неполадки возникают именно в процессе взаимодействия между ОС и серверами разработчиков.
Для самостоятельной регистрации библиотеки нужно выполнить три простых шага:
- Зажать комбинацию клавиш “Windows+R”.
- В строке выполнения вписать команду “cmd”.
- После этого откроется командное окно, в котором нужно провести регистрацию библиотеки. Ее название зависит от того, с каким именно файлом произошли неполадки.
Через среду восстановления
Быстро и просто исправить все ошибки операционной системы поможет специальная утилита восстановления. Она предусмотрена в самой ОС. Для ее запуска нужно одновременно зажать клавиши Windows+I, после чего откроется окно параметров.
Из открытого списка нужно выбрать пункт «Обновление и безопасность», а затем вкладку «Восстановление». Нужный раздел «Особые варианты загрузки» будет находиться в самом низу. В нем нужно выбрать операцию «Перезагрузить сейчас».
Обратите внимание! В этом каталоге также можно «откатить» операционную систему до заводских настроек. Это значит, что система будет восстановлена и вернется к своему первоначальному виду. Все установленные и сохранение файлы и программы будут удалены безвозвратно, поэтому их лучше сохранить заранее. System Reboot считается одним из лучших способов «лечения» системы и исправления ее от ошибок.
Как только система будет перезагружена, вместо обычного экрана запуска появится окно для решения неполадок. Для автоматического анализа проблем и их решения понадобится кликнуть на кнопку «Troubleshoot».
После этого компьютер будет снова перезагружен. При повторном включении абсолютно все ошибки будут исправлены без удаления пользовательских файлов или программ.
Обновление программ и установка необходимых DLL вручную
Проблемы с DLL-файлами довольно распространены среди пользователей, поэтому в Интернете есть множество ресурсов, предоставляющих их рабочие копии бесплатно. Но среди них попадаются мошенники, которые раздают «зараженные» файлы. Пользоваться сторонними и непроверенными ресурсами в целях безопасности компьютера и информации, содержащейся на нем, строго запрещено. Перед тем, как скопировать скачанную библиотеку в системную директорию, ее нужно тщательно проверить антивирусом.
К надежным источникам для скачивания относятся такие крупные площадки, как:
- Download-dll.ru;
- ru;
- Dll-files.ru.
Принцип использования довольно прост. Нужно ввести имя недостающего файла на сайте, скачать его и проверить антивирусом. Если с ним все в порядке, то его можно смело помещать в системную папку.
Переустановка программы
Не всегда проблема с запуском приложений заключается в неполадках самой ОС. Есть большая вероятность того, что в процессе установки утилиты возникла ошибка, после чего система просто не может обнаружить нужный DLL-файл.
Исправить ситуацию поможет обычная переустановка программы. Есть один важный момент. Перед тем, как инсталлировать утилиту вновь, ее нужно полностью удалить ТОЛЬКО через каталог «Установка и удаление программ». Он находится в разделе «Панель управления» в меню «Пуск». Также после деинсталляции понадобится перезагрузить компьютер, и только после этого можно приступать к повторной установке.
Обновление драйверов
Обновляя драйверное программное обеспечение, решается самая главная причина возникновения проблем – несовместимость между тремя основными составляющими устройства:
- Аппаратным оборудованием.
- Установленными программами.
- Операционной системой.
Сделать это можно вручную, или при помощи специальных программ. Здесь будет рассмотрен первый метод:
- Для начала нужно войти в Диспетчер задач.
- Найти строку с названием компьютера и щелкнуть по ней правой кнопкой мышки.
- Выбрать функцию «Обновить конфигурацию».
Для обновления драйверов понадобится Интернет-соединение.
Очистка компьютера от вирусов
Еще один эффективный способ решения неполадок с DLL-файлами – это сканирование компьютера на вирусы с их последующим удалением. Для этих целей подойдет любой скачанный антивирус или же встроенный «Защитник». Он быстро обнаружит и поместит в карантин ошибочную библиотеку, созданную вирусом, и удалит ее.
После этого нужно будет установить или обновить пакет Microsoft Visual C++ и восстановить работу и взаимодействие системных файлов.
Программы для автоматического исправления ошибок
Провести диагностику и исправить ошибки можно и в автоматическом режиме при помощи специальных программ. Без конкретных названий найти хорошее ПО, которое эффективно бы справлялось с поставленными задачами, довольно трудно. Чаще всего в ТОПе поиска находятся приложения, предназначенные для чистки компьютера, но не для решения проблем с системными библиотеками.
Помимо встроенных расширений для устранения неполадок (они описаны в разделе про среду восстановления) есть несколько сторонних утилит, которые также настраивают корректную работу ОС:
- FixWin 10 подойдет для устройств под управлением Windows Ее единственный недостаток – отсутствие русского языка, который с лихвой покрывается ее достоинствами: работа без установки, широкий инструментарий для автоматической коррекции типичных ошибок, а также подробная инструкция о том, как исправить неполадку вручную для каждого типа сообщения и файла.
- Kerish Doctor – это многофункциональная программа, описание которой не войдет в рамки одной статьи. В этот список она попала, благодаря разделу «Обслуживание» и «Решение проблем с ПК». В нем размещен широкий список автоматических действий в зависимости от заявленной проблемы. В нее включены практически все случаи, за исключением специфических и узконаправленных. Подходит для любой обслуживаемой версии Windows.
- И последняя программа Anvisoft PC PLUS – удобное и функциональное решение для исправления ошибок во всех версиях ОС. Она проста в использовании. После запуска на главном экране нужно выбрать тип возникшей проблемы, затем конкретную неполадку и запустить автоматическую диагностику и исправление. В большинстве случаев для скачивания дополнительных файлов потребуется подключение к интернету. Программа работает только на английском языке.
Заключение
Основными источниками ошибок системных библиотек являются: устаревшие версии ОС и драйверов, вирусы, случайное удаление нужных файлов и несовместимость основных составляющих. 99% проблем (за исключением специфических случаев) можно решить вручную, используя инструкции из разделов выше, или воспользоваться одной из программ, исправляющей неполадки автоматически.
- 11 Янв 2015
radeon_save, что такое ТП ???
- 11 Янв 2015
- 12 Янв 2015
Тоже был неприятно удивлен этому. Может кто знает как всё-таки прошить Tiny 2313A soic через ICSP ?
ПО ver 6.10, HW ver. последняя 03.2.63
Или есть смысл сразу ТП писать? Был у кого опыт общения с ТП этого программатора?
Тебе ж конкретно по ATtiny2313A в инфо файле написано и нарисовано, что шьется (в твоем корпусе) только через SO-DIP20 адаптор. Просьбы в тех.поддержку писать, да ещё и китайскую … мало вероятно что прочтут хотя бы.
Да и ещё на вопрос «…а как можно прошить ПЗУ AT45DB041B с помощью ICSP интерфейса» в рисунке ошибка, для корпуса CASON и 8-SOIC надо соединять так (для корпусов 28-pin смотрим datasheet):
1 нога ICSP программатора — на 4 ножку AT45DB041B
2 нога — на 3, 5 и 6 ножки AT45DB041B
3 — на 7
4 — на 1
5 — на 8
6 — на 2
на цвета шлейфа не обращаем внимания.
- 12 Янв 2015
radeon_save сказал(а):
Тоже был неприятно удивлен этому. Может кто знает как всё-таки прошить Tiny 2313A soic через ICSP ?
ПО ver 6.10, HW ver. последняя 03.2.63
Или есть смысл сразу ТП писать? Был у кого опыт общения с ТП этого программатора?
А таки да, походу шьется только через ZIF разьем, ICSP не активен, а ты не пробовал поэксперементировать и в ZIF согласно распиновке чипа в даташите найти на чипе ICSP выводы и воткнуть провода в ZIF и попробовать шить? Проконает ли?
- 12 Янв 2015
Leumas, Тоже об этом думал. Пробовал, спаял переходник как вы выше указали, нифига. Программатор не видит её, ID не получает. МС точно живая так как через Willem прошивается по ISP. Сейчас Willema нет под рукой, прошить надо 12 шт AT2313 уже распаянных на рабочих образцах.
Кстати, интересно, почему не проканало… Может программатор в панели по другому принципу (шине) общается с МС ?!?
- 12 Янв 2015
Эх, значит через ZIF панель прогер с микрой общается только по паралельному интерфейсу, значит последовательный интерфейс ICSP для 2313 и 4313 китайцы еще не реализовали
Мне самому нада будет 10шт тинек2313 зашить, пока не распаяны то могу и через адаптер прошить, но как только запаяю то останется только ICSP который походу китайцы для этих микрух не допилили еще
Добавят ли?
- 12 Янв 2015
Так вот я и хотел написать в ТП, может хоть что-нибудь ответят, да только не нашел почту, на которую писать.
Ставил прогу WizardProg87, думал там реализованно- ничего подобного. Думаю что наши ребята просто перевели программу от MiniPro.
- 12 Янв 2015
Так оно и есть, это таже самая прога, только переведена на русский + иконки сменили.
имейл вроде как autoelector@yahoo.com
- 12 Янв 2015
Ок, напишу им. По результату отпишусь, если интересно.
- 12 Янв 2015
Будет хорошо, пора бы им обновить софт, добавить чипы и расширить их количество, особенно если научат читать NAND чипы )))
- 13 Янв 2015
Будет нанды обрабатывать — ему цены не будет . Мне голенький едет , так слежу за темками на разных форумах .
Вот что-то сам нарисовал и ребята помогали .
► MiniProTL866_tsop.rar
- 13 Янв 2015
Хочу заказать данный программатор TL866A, но вот вопрос интересует: может он прошивать такие влешки как в планшетах и TV-box напрямую? они вроде бы и называются NAND чипы. упомянул выше:
Leumas сказал(а):
Будет хорошо, пора бы им обновить софт, добавить чипы и расширить их количество, особенно если научат читать NAND чипы )))
- 13 Янв 2015
Supercontick, такие
Supercontick сказал(а):
TL866A не шьет.
- 13 Янв 2015
Supercontick, если не ошибаюсь то тебе нада прогер Тритон
- 16 Янв 2015
Привет всем. Хочу предупредить всех, что Wizardprog v 2.0 на XP выдаёт ошибку устаревшей программы! Предыдущая версия 1.6 работает нормально.
- 17 Янв 2015
Сегодня пришел данный программатор TL866CS / поставил оболочку Wizardprog v 2.0 на XP .программатор тест прошел. пока ничего не прошивал . но с виду все работает.
- 17 Янв 2015
Тест и у меня проходил TL866A, а вот при попытке чтения………
- 17 Янв 2015
serg55.usv сказал(а):
Будет нанды обрабатывать — ему цены не будет
Не будет с Nand работать
artvv сказал(а):
Хочу предупредить всех, что Wizardprog v 2.0 на XP выдаёт ошибку устаревшей программы! Предыдущая версия 1.6 работает нормально.
Может все же не ошибку выдает,а предупреждение обновить прошивку прогера.
- 17 Янв 2015
В windows 8 не требует обновить прошивку, а в XP требует. Не кажется это странным?
- 17 Янв 2015
artvv сказал(а):
В windows 8 не требует обновить прошивку, а в XP требует. Не кажется это странным?
Работать на несоответствующей прошивке не будет.
- 18 Янв 2015
Прошу у всех прощения. Проверял в спешке на работе, и где-то лоханулся. Перепроверил дома — и на 8-ке не работает.
В предыдущих версиях, и нашей и китайской, прошивки были одинаковые. Теперь они отличаются. Китайская свежее нашей:
Файл прошивки update.bin в WizardProg87 создан 26.01.2014 ICinfo.dll создан 14.02.2014.
Файл прошивки update.dat в MiniPro создан 16.07.2014 InfoIC.dll создан 16.07.2014.
Соответственно версии у прошивок разные:
У MiniPro Firmware version:03.2.63
У WizardProg87 Firmware version:03.2.62
Сообщение выскакивает у тех, кто работал с китайской прошивкой
от версии 6.10, а перешить наша программа уже не даёт. Просто кнопка перепрошивки не активна. Пробовал откатиться на старую
версию прошивки от китайской 5.91 с помощью программы
«TL866 firmware updater». После этого наша программа предложила
обновить прошивку, и всё заработало. Затолкать сразу нашу
прошивку с помощью «TL866 firmware updater» не получилось.
Пишет «Ошибка CRC».
Для себя сделал вывод, что нужно вернуться к китайской.
Да и у китайской на 24 микросхемы больше в списке.
- 22 Янв 2015
Прошло 10 дней с момента написания в ТП MiniPro. Ни ответа, ни привета… В принципе шанс был что они ХОТЬ ЧТО-ТО ответят, но нет, к сожалению. Писал письмо на Английском, разумеется, с разных доменов — yandex.ru и gmail.com, «отбивки» почтовых серверов не было, значит почта к ним ушла.
Я был оптимистично настроен, так как приходилось писать в ТП компании ASRock- ответили быстро и по существу.
Добавлено 22-01-2015 14:50
В ASRock писал, когда ремонтировал материнскую плату, на s775, не смог определить одну МС. Описание в инете не нашел, решил написать на авось в их ТП, описал проблему и парт номер детали и позиционное обозначение на плате и ревизию платы с моделью, разумеется. Ответили мгновенно (в течении суток), даже в виде таблички, я был приятно удивлен.
- 24 Янв 2015
radeon_save сказал(а):
Прошло 10 дней с момента написания в ТП MiniPro. Ни ответа, ни привета…
С тех пор ,когда афтары-китайцы вынудили сломать прошивку этого прогера,о всяких пожеланиях и обновлениях можно забыть.
- 24 Янв 2015
А кто его знает, может обновка и будет, время покажет, а пока довольствуемся тем что имеем.
Кстати, видел на ютубе переходники HDMI EEPROM
Нет ли у кого то печатной платки?
видео вот ссылка скрыта от публикации
и вот ссылка скрыта от публикации
- 1 Фев 2015
После установки версии MiniPro 6.10 попросила обновить программу програматора, меня чёрт дёрнул нажать в Tools «Reflash firmware» после этого программатор не работает с WizardProg87 пишет «Версия программі устарела для данной операции» и самое главное перестала видеть микросхемы PLCC32.
Можно как-то решить данную проблему откатом на предыдущую версию ?
Содержание
- Причины некорректной работы DLL файлов
- Инструкция для решения ошибок dll
- Ошибки связанные c библиотеками DirectX
- Ошибки связанные c библиотеками Microsoft Visual C++
- DLL файлы удалены или устарели
- Загрузка dll с помощью командной строки
- Обновление причастного драйвера
- Проверка на вирусы
- Реестр поврежден?
Из-за несовместимости между программами и системой мы иногда сталкиваемся с ситуацией, когда ПО не может работать, а система сообщает, что отсутствует поддержка определенного DLL-файла. Почему программное обеспечение, которое хорошо работает под определенной версией системы, не может использовать другую? Есть ли какое-либо другое решение, кроме переустановки Windows? Что делать, если появляется сообщение о нехватке любого DLL? На данной странице вы узнаете, как быстро исправить эту ошибку.
При создании многих программ, из-за необходимости вызывать похожие или идентичные функции, разработчик проектирует части, которые являются относительно независимыми или могут совместно использоваться в качестве модуля во время разработки. Такие блоки упакованы в DLL-библиотеки динамической компоновки. Программа может вызывать несколько dll. И наоборот несколько программ могут совместно использовать один и тот же файл, что гораздо удобнее в управлении, и при этом сильно экономит ресурсы.
Файлы DLL, используемые многими программами, существуют в каталоге Windows или его подразделах. Это документы, которые поставляются с системой. Некоторые программы тоже устанавливают эти файлы в каталог ОС при их установке. Однако, когда ПО используется как лицензионное, то пользователи обычно не испытывают проблем.
У вас же могут быть разные случаи, например сам ДЛЛ был скопирован в неправильную директорию или при установке ПО не произвел замену с уже существующим в нужной системной папке.
Одной из основных проблем, с которыми сталкиваются пользователи Windows, являются ошибки файла DLL. Данные файлы представляют собой библиотеки с динамической компоновкой, которые используются для повышения производительности программ и их эффективности. Проблема с DLL может привести к замедлению работы компьютера. Если вы не предпримете надлежащих шагов для исправления рассматриваемых ошибок, то ваш компьютер станет непригодным для использования.
- Компоненты Windows не установлены:
- DirectX;
- Visual C.
- DLL файлы удалены или устарели,
- +способ по загрузке dll из командной строки.
- Драйвера вашего ПК устарели или отсутствуют.
- Вирусы могут помешать нормальной работе.
- Реестр системы поврежден.
Важно отметить, что ошибки файлов DLL регулярно проверяются Windows. Каждый файл DLL имеет ограничение на проверку. Если с этим файлом возникла проблема, операционная система уведомит вас и попросит устранить неисправность. Однако еще более важно то, как вы исправляете эти ошибки, потому что невозможно решить проблему, не имея доступа к необходимым инструментам.
Исправление ошибок DLL не является невыполнимой задачей. По сути, если ваш компьютер сталкивается с проблемой при выполнении определенной программы, первое, что вы должны сделать, это найти на компьютере файлы DLL, которые соответственно лежат в папке с имени программы. Затем вы должны устранить любые проблемы, связанные с этими конкретными DLL документами.
Инструкция для решения ошибок dll
Самым правильным методом будет скачивание и установка ПО заново вместе со всеми дополнительными компонентами указанными в системных требованиях. Будь то игра или же рабочая программная среда для её нормального запуска обычно требуются DirectX, Visual C.
Ошибки связанные c библиотеками DirectX
И так, когда Windows обнаружит ошибку, то система покажет уведомление с надписью:
Запуск программы не возможен, так как на компьютере отсутствует (название файла DLL). Попробуйте переустановить программу.
В случаях, когда сам файл имеет название по типу следующих библиотек: d3dx9.dll, xinput1.dll, d3dx10.dll и т.д. (часто имена очень схожи и имеют буквы d и x перед расширением), то решение проблемы заключается в установке нужной версии DirectX, которую можно узнать в системных требованиях самой программы (рядом с системными требованиями пишут и версию Дирекса для корректной работы).
Ошибки связанные c библиотеками Microsoft Visual C++
Еще одним частым пулом уведомлений являются случаи, когда внутри текста присутствует фраза:
Запуск программы не возможен, так как на компьютере отсутствует (название файла DLL). Попробуйте переустановить программу.
В названии файла фигурируют слова MSVC или RUNTIME.
Исходя из данных системных требований приложения, определите какая именно версия библиотеки Visual C нужна и установите её.
DLL файлы удалены или устарели
Ради примера допустим, что при установке ПО вы не изменяли место, в котором будут храниться его файлы.
Система подскажет, какого файла не хватает. Воспользуйтесь функцией системного поиска (лупа в нижнем левом углу экрана), для розыска этого файла в используемой ОС, выберите из результатов документ с DLL расширением (имя должно совпадать с тем, которое указано в уведомлении об ошибке), находящегося в системном каталоге (часто это C:WindowsSystem32). Скопируйте и переместите его в новую системную директорию, в зависимости от вашей ОС (пути указаны в пункте 2 данного алгоритма).
Отсутствующие DLL-файлы не обязательно копировать в директорию Windows, их можно скопировать в другие места. Самым частым является директория с корнем установленного ПО. При установке игры или приложения вы указываете путь установки, именно о нем здесь идет речь.
- Внимательно посмотрите на название ошибки. Это может быть:
- unarc.dll
- vcruntime140.dll
- window.dll
- windows.dll
- msvcp140.dll
- msvcp120.dll
- msvcp100.dll
- steam.dll
- d3dx9.dll
- xinput1.dll
- steamapi64.dll
- isdone.dll
Если в представленном списке нет нужно вам файла (имя.dll высвечивается в окне уведомления об ошибке сразу после слов «Запуск программы не возможен, так как на компьютере отсутствует…» — пример показан на скриншотах выше), то посетите базу DLL.
В поле «Поиск недостающих Dll файлов» введите имя, которое подсказала вам система например: unarc.dll и нажмите «Поиск DLL файлов».
Ниже, в результатах поиска появятся все доступные документы кликните по ссылке с именем файла и перейдите таким образом на страницу скачивания.
Пролистайте вниз и найдите кнопку «Скачать». При нажатии на вашем ПК в папке «Загрузки» , появится искомый документ, после чего переходите к следующему пункту.
Мы советуем вам поместить файл в директорию программы, которая запрашивает данный документ. Убедитесь, что вы используете правильную разрядность ПО и ОС. Если ошибетесь с версиями, то возникнет ошибка 0xc000007b.
- После того, как вы определились с кодом ошибки
- Скачайте недостающий файл DLL и переместите по пути C:WindowsSystem32 или по вашему (если была изменена корневая папка).
- Если копирование с заменой в «System32» не сработало, попробуйте переместить в системные директории (это зависит от версии ОС и от того, откуда приложение будет запрашивать библиотеки):
- C:WindowsSystem (Windows 95/98/Me);
- C:WINNTSystem32 (Windows NT/2000);
- C:WindowsSystem32 (Windows XP, Vista, 7, 8, 8.1, 10).
- C:WindowsSysWOW64.
Загрузка dll с помощью командной строки
- Если все таки не получается, то через командную строку от имени администратора введите:
- Если у вас Виндовс 32bit
- regsvr32 (укажите имя недостающего файла).dll. Без скобок.
- Если у вас Виндовс 64bit
cd c:windowssyswow64
- regsvr32 c:windowssyswow64(укажите имя недостающего файла).dll. Без скобок.
Обновление причастного драйвера
Бывают случаи, когда ошибка DLL возникает из-за устаревшего драйвера. Например, если игра запущена через диск, то стоит обновить драйвер в диспетчере устройств. Для этого:
- В левом нижнем углу экрана найдите значок лупы для осуществления поиска и в поле ввода напишите диспетчер устройств.
- Кликните Enter.
- В появившемся окне выберите оборудование, драйвер которого мешает корректной работе (в рассматриваемом случае это дисковод).
- Нажмите по его названию правой кнопкой мыши.
- В раскрывшемся меню выберите пункт обновить драйверы…
Проверка на вирусы
Если на данном этапе проблема до сих пор не решена, проверьте свой ПК на вирусы. Это необходимо для того, чтобы убедиться нет ли вредоносных файлов, которые маскируются под DLL.
Реестр поврежден?
Самое страшное, что может случится у обычного пользователя, это когда важная ветка реестра операционной системы повреждена. В этом случае даже если заменять DLL файлы на рабочие, скачанные вручную и закинутые в корневые папки по типу System32, каждый раз будут появляться новые уведомления со следующей ошибкой (т.е. скорее всего все DLL указанные в окнах ошибки нужно будет так же устанавливать самостоятельно, а их может быть очень много).