Перейти к содержанию

partoftheworlD

Помогаторы
  • Публикаций

    2673
  • Зарегистрирован

  • Посещение

  • Победитель дней

    168

Комментарии блога, опубликованные partoftheworlD


  1. Проблема с ассоциативным списком решена с помощь костылей. (defineGRegs)

     

    Код в принципе рабочий, но я бы переписал, а именно тот участок кода, который устанавливает бряк на найденный регистр, это не совсем правильно.
    Правильнее будет искать указатель на этот адрес, через поиск и уже после ставить бряк на найденный указатель, чтобы получить следующее смещение, если код не переписать он может зациклится на одной инструкции, если нет выхода на структуру выше.


  2. 3 часа назад, MasterGH сказал:

    Тут без вариантов — искать поинтер вручную или какими-то разными способами.


    Раз это локальный баг, то похоже придется искать из-за чего в один играх сканер указателей работает, а в других нет.

    (!!!Заметка: Проверить исходники CE, а так же посмотреть, есть ли отличия между сегментами кода, в играх где сканер указателей работает и в DS3)


  3. 2 часа назад, MasterGH сказал:

    А есть готовый указатель для этой игры? Какой параметр искать?

     

    Все готовые указатели есть в таблице рекласса, начальный класс это CWorldChrManImp, ну или так указатель на здоровье DarkSoulsIII.exe+0x4768e78] +80] +1F90] +18] +D8]

     

    2 часа назад, MasterGH сказал:

    Какой параметр искать?

    Любой, например здоровье.


  4. 58 минут назад, MasterGH сказал:

    с ними тоже можно поэкспериментировать 

    Уже сегодня экспериментировал с ними, на удивление даже карта указателей пустая(которая "Generate Pointermap")

    Каких-то спец. атрибутов на регионы памяти тоже нет. В том же скариме такой выход на структуру уровнем выше работает.

     

    image.thumb.png.9c571d4b61d7a1ac70ea7380ec9e9f8a.png

     

    image.thumb.png.d676da688535b6e4fbd2f5f027612bd1.png

    • Понравилось 1

  5. 38 минут назад, Garik66 сказал:

    @partoftheworlD , они все на английском?
    Тогда мне ссылки и ещё знание английского. :D

     

    Треть на русском(по cpp, регуляркам, патернам, глубокому обучению). Так что давай начинай плюсы учить. Начиная с книги Страуструпа, после Рихтер с winapi и закрепить все это полным справочником по cpp.


  6. 12 минут назад, MasterGH сказал:

    для распознавания изображения и реакции на него. Sikulix, OpenCV

     

    Для этого нужно будет использовать OpenCV на чем-то компилируемом, иначе обработка в 15-20 кадров не подойдет.

     

    14 минут назад, MasterGH сказал:

    что можно подгрузить свой ассет со своими сбилженными скриптами с собранной dll сборке

    А для этого надо знать C#

     

    Единственный вариант остался, это найти все статические переменные в UnityPlayer в надежде, что какой-нибудь из них является индикатором загрузки уровней/передачи управления гг.


  7. 8 часов назад, MasterGH сказал:

    Если не секрет, что за игра на Unity и зачем узнавать состояние загрузки игры?

     

    My Friend Pedro, состояние игры нужно, чтобы правильно работал внешний таймер, а именно удалял время между загрузками уровней.

     

    8 часов назад, MasterGH сказал:

    Билд под mono или под il2cpp?

    ll2cpp

     

    8 часов назад, MasterGH сказал:

    внедрить его в готовый билд

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

     

    8 часов назад, MasterGH сказал:

    с проверкой загруженного индекса сцены

    Делал такую проверку, при переходе между уровнями появляется загрузочный экран, который делится на 3 части, затемнение экрана, загрузка уровня, затемнение экрана. Флаг загрузки уровня нашел, а вот с затемнением такое не работает из-за чего возникает разница во времени, а на 50+ уровнях это очень сильно заметно.(+2-3 минуты)


  8. Подключение к питону происходит с помощью:

    import idc
    import idautils
    import idaapi

    У меня есть наработки некоторые, возможно что-то пригодится.
     

    Спойлер
    
    import idc
    import idaapi
    
    class Func(object):
        def __init__(self):
            self.reg_value = re.compile(r'')
            self.stack_view = []
            self.level = 1
    
        def range_reverse(self, start, stop):
            for i in FuncItems(stop):
                if start > i >= stop:
                    yield i
    
        def run(self):
            if self.stack_view:
                for j in self.stack_view:     
                    current_function = idaapi.get_func(j)
                    level = "-" * self.level
                    print("{} Jump into -> 0x{}".format(level, hex(current_function.startEA)[2:].replace("L", "").upper()))
                    for j in [i for i in self.range_reverse(current_function.endEA, current_function.startEA)]:
                        print("{} 0x{} -- {}".format(level, hex(j)[2:].replace("L", "").upper(), idc.GetDisasm(j)))                    
                    self.level += 1
            else:
                print "Please input addresses to stack view buffer"
                pass
    
    
    if __name__ == '__main__':
        f = Func()
        f.stack_view = [0x214FE, 0x20F30, 0x214E0, 0x13F00]
        f.run()

     

     

    В выводе получим

    Спойлер
    
    - Jump into -> 0x214E0
    - 0x214E0 -- push    ebp
    - 0x214E1 -- mov     ebp, esp
    - 0x214E3 -- lea     esp, [esp-10h]
    - 0x214E7 -- mov     [ebp+var_C], eax
    - 0x214EA -- mov     [ebp+var_4], edx
    - 0x214ED -- mov     [ebp+var_8], ecx
    - 0x214F0 -- mov     eax, [ebp+arg_0]
    - 0x214F3 -- test    eax, eax
    - 0x214F5 -- jnz     locret_21589
    - 0x214FB -- mov     eax, [ebp+var_8]
    - 0x214FE -- cmp     word ptr [eax], 1Bh
    - 0x21503 -- jnz     locret_21589
    - 0x21509 -- push    0
    - 0x2150B -- mov     eax, [ebp+var_8]
    - 0x2150E -- movzx   ecx, word ptr [eax]
    - 0x21511 -- mov     eax, [ebp+var_4]
    - 0x21514 -- mov     edx, 0B01Eh
    - 0x21519 -- call    sub_8E870
    - 0x2151E -- test    eax, eax
    - 0x21520 -- jnz     short locret_21589
    - 0x21522 -- push    0
    - 0x21524 -- mov     eax, [ebp+var_4]
    - 0x21527 -- mov     ecx, 0
    - 0x2152C -- mov     edx, 87h ; '‡'
    - 0x21531 -- call    sub_8E870
    - 0x21536 -- and     eax, 4
    - 0x21539 -- jnz     short locret_21589
    - 0x2153B -- mov     eax, [ebp+var_C]
    - 0x2153E -- test    dword ptr [eax+160h], 4
    - 0x21548 -- jz      short locret_21589
    - 0x2154A -- mov     eax, [ebp+var_4]
    - 0x2154D -- mov     dl, 1
    - 0x2154F -- call    sub_13F00
    - 0x21554 -- mov     [ebp+var_10], eax
    - 0x21557 -- test    eax, eax
    - 0x21559 -- jz      short locret_21589
    - 0x2155B -- mov     eax, [ebp+var_10]
    - 0x2155E -- cmp     dword ptr [eax+378h], 0
    - 0x21565 -- jz      short locret_21589
    - 0x21567 -- mov     eax, [ebp+var_10]
    - 0x2156A -- mov     eax, [eax+378h]
    - 0x21570 -- mov     edx, [ebp+var_10]
    - 0x21573 -- mov     edx, [edx+378h]
    - 0x21579 -- mov     edx, [edx]
    - 0x2157B -- call    dword ptr [edx+2E8h]
    - 0x21581 -- mov     eax, [ebp+var_8]
    - 0x21584 -- mov     word ptr [eax], 0
    - 0x21589 -- leave
    - 0x2158A -- retn    4
    -- Jump into -> 0x20F30
    -- 0x20F30 -- push    ebp
    -- 0x20F31 -- mov     ebp, esp
    -- 0x20F33 -- lea     esp, [esp-10h]
    -- 0x20F37 -- mov     [ebp+var_C], eax
    -- 0x20F3A -- mov     [ebp+var_4], edx
    -- 0x20F3D -- mov     [ebp+var_8], ecx
    -- 0x20F40 -- mov     eax, [ebp+var_8]
    -- 0x20F43 -- cmp     word ptr [eax], 0
    -- 0x20F48 -- jz      locret_20FCF
    -- 0x20F4E -- mov     edx, [ebp+var_4]
    -- 0x20F51 -- mov     eax, 5C29B4h
    -- 0x20F56 -- call    sub_C910
    -- 0x20F5B -- test    al, al
    -- 0x20F5D -- jz      short loc_20FC3
    -- 0x20F5F -- mov     eax, [ebp+var_4]
    -- 0x20F62 -- mov     [ebp+var_10], eax
    -- 0x20F65 -- mov     eax, [ebp+var_C]
    -- 0x20F68 -- cmp     word ptr [eax+150h], 0
    -- 0x20F71 -- jz      short locret_20FCF
    -- 0x20F73 -- mov     eax, [ebp+var_C]
    -- 0x20F76 -- mov     edx, [ebp+var_8]
    -- 0x20F79 -- mov     ax, [eax+150h]
    -- 0x20F80 -- cmp     ax, [edx]
    -- 0x20F83 -- jnz     short locret_20FCF
    -- 0x20F85 -- mov     eax, [ebp+var_C]
    -- 0x20F88 -- mov     eax, [eax+154h]
    -- 0x20F8E -- cmp     eax, [ebp+arg_0]
    -- 0x20F91 -- jnz     short locret_20FCF
    -- 0x20F93 -- mov     eax, [ebp+var_C]
    -- 0x20F96 -- mov     eax, [eax+14Ch]
    -- 0x20F9C -- cmp     eax, [ebp+var_10]
    -- 0x20F9F -- jnz     short locret_20FCF
    -- 0x20FA1 -- push    [ebp+arg_0]
    -- 0x20FA4 -- mov     ecx, [ebp+var_8]
    -- 0x20FA7 -- mov     edx, [ebp+var_10]
    -- 0x20FAA -- mov     eax, [ebp+var_C]
    -- 0x20FAD -- call    sub_21590
    -- 0x20FB2 -- push    [ebp+arg_0]
    -- 0x20FB5 -- mov     ecx, [ebp+var_8]
    -- 0x20FB8 -- mov     edx, [ebp+var_10]
    -- 0x20FBB -- mov     eax, [ebp+var_C]
    -- 0x20FBE -- call    sub_214E0
    -- 0x20FC3 -- mov     eax, [ebp+var_C]
    -- 0x20FC6 -- mov     word ptr [eax+150h], 0
    -- 0x20FCF -- leave
    -- 0x20FD0 -- retn    4
    --- Jump into -> 0x214E0
    --- 0x214E0 -- push    ebp
    --- 0x214E1 -- mov     ebp, esp
    --- 0x214E3 -- lea     esp, [esp-10h]
    --- 0x214E7 -- mov     [ebp+var_C], eax
    --- 0x214EA -- mov     [ebp+var_4], edx
    --- 0x214ED -- mov     [ebp+var_8], ecx
    --- 0x214F0 -- mov     eax, [ebp+arg_0]
    --- 0x214F3 -- test    eax, eax
    --- 0x214F5 -- jnz     locret_21589
    --- 0x214FB -- mov     eax, [ebp+var_8]
    --- 0x214FE -- cmp     word ptr [eax], 1Bh
    --- 0x21503 -- jnz     locret_21589
    --- 0x21509 -- push    0
    --- 0x2150B -- mov     eax, [ebp+var_8]
    --- 0x2150E -- movzx   ecx, word ptr [eax]
    --- 0x21511 -- mov     eax, [ebp+var_4]
    --- 0x21514 -- mov     edx, 0B01Eh
    --- 0x21519 -- call    sub_8E870
    --- 0x2151E -- test    eax, eax
    --- 0x21520 -- jnz     short locret_21589
    --- 0x21522 -- push    0
    --- 0x21524 -- mov     eax, [ebp+var_4]
    --- 0x21527 -- mov     ecx, 0
    --- 0x2152C -- mov     edx, 87h ; '‡'
    --- 0x21531 -- call    sub_8E870
    --- 0x21536 -- and     eax, 4
    --- 0x21539 -- jnz     short locret_21589
    --- 0x2153B -- mov     eax, [ebp+var_C]
    --- 0x2153E -- test    dword ptr [eax+160h], 4
    --- 0x21548 -- jz      short locret_21589
    --- 0x2154A -- mov     eax, [ebp+var_4]
    --- 0x2154D -- mov     dl, 1
    --- 0x2154F -- call    sub_13F00
    --- 0x21554 -- mov     [ebp+var_10], eax
    --- 0x21557 -- test    eax, eax
    --- 0x21559 -- jz      short locret_21589
    --- 0x2155B -- mov     eax, [ebp+var_10]
    --- 0x2155E -- cmp     dword ptr [eax+378h], 0
    --- 0x21565 -- jz      short locret_21589
    --- 0x21567 -- mov     eax, [ebp+var_10]
    --- 0x2156A -- mov     eax, [eax+378h]
    --- 0x21570 -- mov     edx, [ebp+var_10]
    --- 0x21573 -- mov     edx, [edx+378h]
    --- 0x21579 -- mov     edx, [edx]
    --- 0x2157B -- call    dword ptr [edx+2E8h]
    --- 0x21581 -- mov     eax, [ebp+var_8]
    --- 0x21584 -- mov     word ptr [eax], 0
    --- 0x21589 -- leave
    --- 0x2158A -- retn    4
    ---- Jump into -> 0x13F00
    ---- 0x13F00 -- push    ebp
    ---- 0x13F01 -- mov     ebp, esp
    ---- 0x13F03 -- lea     esp, [esp-0Ch]
    ---- 0x13F07 -- mov     [ebp+var_4], eax
    ---- 0x13F0A -- mov     [ebp+var_8], dl
    ---- 0x13F0D -- jmp     short loc_13F33
    ---- 0x13F10 -- cmp     [ebp+var_8], 0
    ---- 0x13F14 -- jnz     short loc_13F27
    ---- 0x13F16 -- mov     edx, [ebp+var_4]
    ---- 0x13F19 -- mov     eax, 59ECF0h
    ---- 0x13F1E -- call    sub_C910
    ---- 0x13F23 -- test    al, al
    ---- 0x13F25 -- jnz     short loc_13F45
    ---- 0x13F27 -- mov     eax, [ebp+var_4]
    ---- 0x13F2A -- mov     eax, [eax+1F8h]
    ---- 0x13F30 -- mov     [ebp+var_4], eax
    ---- 0x13F33 -- cmp     [ebp+var_4], 0
    ---- 0x13F37 -- jz      short loc_13F45
    ---- 0x13F39 -- mov     eax, [ebp+var_4]
    ---- 0x13F3C -- cmp     dword ptr [eax+1F8h], 0
    ---- 0x13F43 -- jnz     short loc_13F10
    ---- 0x13F45 -- mov     edx, [ebp+var_4]
    ---- 0x13F48 -- mov     eax, 59ECF0h
    ---- 0x13F4D -- call    sub_C910
    ---- 0x13F52 -- test    al, al
    ---- 0x13F54 -- jz      short loc_13F5E
    ---- 0x13F56 -- mov     eax, [ebp+var_4]
    ---- 0x13F59 -- mov     [ebp+var_C], eax
    ---- 0x13F5C -- jmp     short loc_13F65
    ---- 0x13F5E -- mov     [ebp+var_C], 0
    ---- 0x13F65 -- mov     eax, [ebp+var_C]
    ---- 0x13F68 -- leave
    ---- 0x13F69 -- retn

     

     

    Надо будет поправить пару строк, чтобы выводилась не функция целиком, а как при трассировке:
     

    for j in [i for i in self.range_reverse(current_function.endEA, current_function.startEA)]:

     

    Если нужно, вечером могу поискать, где-то был код для постройки графов.

    • Понравилось 1
    • Плюс 2

  9. 11 минут назад, Xipho сказал:

    Побоялись вероятных дедлоков всяко

     

    Но и даже это можно было бы обойти, надо как раз узнать о race condition(забыл как на русском), актуально ли это для потоков винды.


  10. 1 час назад, Xipho сказал:

    Лол, ну и защита )

     

    Самое забавное в ней, то, что там несколько уровней проверки, минимум 6 циклов, которые проверяют друг друга, это отличная защита, похожая почти во всех мультиплеерных играх используется, но все реализовано в одном потоке. Ведь можно было нормально сделать, 2 потока, с кучей проверок проверяющие друг друга и поток на отлов событий, чтобы в случае, если кто-то убил поток, то он бы пересоздавался, ну я бы так сделал.?

     

    1 час назад, Xipho сказал:

    Получается, поток даже не респавнится, если его укокошить?

    Именно.


  11. 10 часов назад, Xipho сказал:

    Хоть это и слегка повредит конверсии нашего сайта в поисковиках

     

    Не повредит, темы ведь будут оформляться так же, просто контент будет в дополнение к статье идти, отдельным файлом на какое-нибудь облако, на случай, если картинки пропадут или текст поедет. Я примерно так себе это представляю.


  12. 24 минуты назад, Antonshka сказал:

    Читая эти книги, используешь сколько-нибудь переводчик?

     

    Раньше изредка, там достаточно легкий английский, минимум незнакомых слов. Сейчас может быть их перевели, надо поискать.


  13. 41 минуту назад, Antonshka сказал:

    У меня есть большое желание освоить программирование, и освоить его настолько профессионально, насколько это возможно.

    Спасибо за ответ, я читал его с большим интересом.

    Не нашел на форуме, так что вот загрузил.

    Книги.7z


  14. 5 часов назад, Antonshka сказал:

    От тебя я хотел бы увидеть статью/статьи, в которой рассказывается:

     

    • о твоей мотивации программирования

    Тут все достаточно просто, раньше я играл в Counter-Strike: Source и меня достали читеры, вот решил сделать свой чит и тут понеслось.

     

    • о твоем стаже программирования

    Стаж С++ на данный момент уже 7-й год, большая часть проектов это специфичные читы(в которых пробую что-то новое и полезное, без различных свистоперделок), пара проектов работы с сетями (прокси серверы), дампер, инжектор, RTTI парсер, нейронка для аимбота, и вот новый проект универсальный фаззер для восстановления SDK для любых игр. Python 2 года, но на нем я ничего сложного не делаю, так простой язык для автоматизации мелких действий, например работы с дизассемблерами и отладчиками, поднятии прокси серверов с возможностью парсинга и интерпретацией данных пакетов в структуры. Ну и по мелочи Java, Pascal, VB, Javascript, Php, Ruby, Go, HTML/CSS, Lua, Rust, Perl, C#, SQL.

     

    • какие книги по программированию ты изучал

    По С++: WINAPI Рихтера, Бьерн Страуструп. Язык программирования С++  и еще можно почитать Полный справочник по C++ 4-е издание. Герберт Шилдт

    По Python: Gray Hat Python Justin Seitz и Gray Hat Hacking 3nd

     

    • какие книги показались сложными, какие бесполезными

    От таких сразу избавляюсь, поэтому сходу вспомнить не могу.

     

    • какие книги ты бы посоветовал изучать, и в каком порядке

    У меня есть своя библиотека, я даже где-то на форуме её скидывал, там собраны все необходимые книги, для того чтобы получить полное понимание устройства работы программ, которые можно изучать в любом порядке.

     

    • какой язык программирования тебе нравится больше и почему

    Вообще не люблю программировать. Но если по языкам, то без сомнений это C++, приятный синтаксис и универсальный язык для любых задач.

     

    • какой язык программирования для тебя самый сложный

    Эзотерические ЯП — реально сложно.

     

    • отзыв об учреждении в котором обучался, об объеме и пользе знаний, которые там приобрел

    Пустая трата времени, объем и польза по нулям. Поэтому и в университет не пошел, во-первых университетов со специальностью связанной с информационной безопасностью можно на пальцах одной руки пересчитать, во-вторых не уверен в том, что мне могу дать какие-то новые знания, а сидеть 4-5 лет, чтобы мне рассасывали, те знания которые у меня есть это 1. Бесполезно. 2. Дорого. 3. Слишком много времени уйдет в пустую, даже относительно заочного обучения. Да и с появлением интернета, весь материал изучаемый в университетах есть в сети, а единственное, что мешает самообразованию это лень.

    • Спасибо 1
    • Плюс 1

  15. Немного фиксов, подобный шеллкод не самая лучшая реализация, потому что, после его выполнения падает cmsCli и никто не сможет больше залогиниться, до перезапуска роутера или cmsctl.
    Решение: укоротить шеллкод и написать 0x12c20 не как адрес возврата, а как следующий адрес выполнения, это было бы идеально решения(если конечно возможно)


  16. Хех...

     

    image.thumb.png.2ed029b9cea8a0c8a127b75af7a5b075.png  

     

    А теперь посмотрим на цены.

     

    image.thumb.png.64bb26030f854b12968352619880e266.png

     

    1879 USD только за дизассемблер + x64,x86 декомпилятор (2629 *2 USD) = 7137 USD  ( ~470.000 | 468529,78 рублей по курсу на 30.03.2019) И это лишь минимальный набор для реверса.

     

    Пожалуй я для себя выбрал инструмент для реверса.

     

    Thats all folks! | Brentwood Karting Blog

    • Понравилось 1
    • Плюс 1

  17. Фикс декомпилятора. Это временное решение, пока не разберусь с кодом.

    Как патчить? найти файл ia.sinc, найти :UCOMISS и заменить строку, тоже самое и с макросом.

     

    define pcodeop fucomiss;
    :UCOMISS         XmmReg, m32      is vexMode=0 & mandover=0 & byte=0x0F; byte=0x2E; ( XmmReg & XmmReg_Da ) ... & m32 {  fucompe(XmmReg_Da, m32); fucomiss(XmmReg_Da, m32);}
    macro fucompe(val1, val2) {
        PF = nan(val1) || nan(val2);
        ZF = PF | ( val1 f== val2 );
        CF = PF | ( val1 f< val2 );   
     
        PF = 1;
        OF = 0;
        AF = 0;
        SF = 0;
    }

     

    До:
    image

     

    После:

    image

     

     


  18. 5 часов назад, Xipho сказал:

    А что за фиксы? Список изменений есть?

    Набор исправлений в файле с инструкциями, для улучшения вывода декомпилятора и дизассемблерного листинга.

    Типа таких. https://github.com/NationalSecurityAgency/ghidra/issues/215#issuecomment-473683687

×

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.