Вирус you are empty

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

Что же нам понадобиться - сама игра (ну или модель которую я приложил в архиве), любой современный компилятор С++ и любимая вами IDE (я пользовался Visual Studio 2008) и ваш любимый Hex Editor (я предпочитаю McAfee FileInsight).

И так приступим. Так как разбирать мы будем формат моделей, то идем в директорию gameres/models. Там вы увидите файл models.pak - это самый обычный ZIP-архив, поэтому можете распаковать его куда вам удобно. Внутри этого архива вы найдете много файлов с расширением *.ds2md - это и есть игровые модели, формат которых мы сейчас попробуем разгадать. Давайте возьмем не особо большую модель - я взял для этих целей модель granata.ds2md. Давайте откроем этот файл в Hex-редакторе.


Первое что сразу бросается в глаза - ASCII-строки. Ok, что нам нужно для того чтобы считать строку - естественно нужно знать ее длину, а это значит что перед самой строкой должна находиться ее длина. Проверим нашу догадку - первой видимой строкой в файле идет строка “DS2ModelFile_1”, если мы посчитаем количество символов - получим цифру 14. Теперь глянем что есть перед этой строкой - т.к. эта строка почти в самом начале файла, перед ней только 2 байта, что соответствует размеру слова - если мы прочитаем это слово - то увидим что оно содержит значение 14 - отлично, теперь мы знаем как читать строки в этом файле. Давайте посмотрим какие строки здесь вообще присутствуют. “DS2ModelFile_1” скорее всего дескриптор формата. Далее строка “1.0” - это скорее всего версия формата. Далее “granade_det_hires” - скорее всего название модели. Хм. а далее перед строкой идут 3 байта. При этом 2 байта перед самой строкой - как положено, это ее длина. Тогда что же это за байт? Ладно, потом разберемся, пока просто запомним что после имени модели надо пропустить 1 байт. Далее строка “default_model” - очень похоже на название материала. Далее - “Z:\gameres\textures\models\weapon\wpn_granaten01.tga” - думаю всем ясно предназначение сей строки - это путь к текстуре. Далее 4 раза повторяется строка “notexture” - забегая на перед скажу что просмотрев еще с десяток моделей я я понял что модель может ссылаться на несколько текстур, и как видим - их максимальное количество 5.

Ну вот - строки закончились, и пошли непонятные данные, более похожие на float - числа с плавающей запятой, неужели это вершинны. Стоп! А как их читать? Сколько их? Ведь мы же шли читая все подряд, нигде не пропуская. Хм. значит это не вершины, попробуем просмотреть чуть дальше, авось чего прояснится. Ага, начиная со смещения 0xBF можно заметить интересную особенность - далее данные идут неким паттерном - в порядке увеличения, и причем данные идут размерностью 2 байта, то есть словом. Ничего не напоминает? Да это же индексы! А сколько же их? А давайте попробуем найти конец индексных данных - а вот и оно по смещению 0x34C9. Ok, давайте узнаем их количество - отнимем от конечного смещения начальное 0x34C9 - 0xBF = 0x340A (13322). Теперь мы знаем размер вершинного буфера, а нам нужно знать количество индексов, разделим размер буфера на размер одного индекса - 13322 / 2 = 6661. Хм. не может быть такого количества индексов, ибо оно не делится на 3. А! Скорее всего последнее слово - это не индекс а количество вершин! Значит индексов 6660 (0x1A04). Давайте поищем это значение в той каше данных перед индексным буфером - а вот и оно по смещению 0xBB.

Отлично, теперь мы уже можем прочесть индексы модели. Перейдем к вершинам. Как мы уже установили - сразу после индексов идут 2 байта (слово) хранящее в себе количество вершин (в данном случае = 1406). Но какой же формат этих вершин? Ok, давайте для начала предположим что вершины имеют самы стандартный набор - позиция, нормаль и текстурные координаты. Опишем формат вершины как такую структуру:

Теперь используя данную структуру попробуем прочитать пару-тройку вершин (я для этого использовал возможность FileInsight задавать свои структуры). Как вы видите - данные действительно хранятся в виде чисел с плавающей запятой (float), но внимательно просмотрев их содержимое можно прийти к выводу - числа больше напоминают трехмерные координаты. Это точно не нормали (ибо каждая тройка значений, образующая вектор, не соответствует требованию единичности). На текстурные координаты тоже не особо похоже (очень мелкие значения, много отрицательных значений). Значит это позиции вершин. А это наталкивает нас на мысль что атрибуты вершин хранятся не в interleaved виде, а в виде отдельных буфферов. Ну и ладно, давайте прочитаем наши вершины. Мы знаем их количество - 1406, знаем размер данных задающих позицию вершины (3 float, 3 * 4 = 12) значит нам надо прочитать 1406 * 12 = 16872 байт. Читаем их. У нас есть позиции вершин. Смотрим что за данные идет дальше (можно для этого использовать ту же структуру). Ага - видим что дальше тоже идут вещественные числа, и каждая тройка значение образует единичный вектор - отлично, мы нашли нормали. Прочтем их (1406 * 12 = 16872 байт). Теперь смотрим что у нас дальше - еще вещественные числа, и уж больно они смахивают на текстурные координаты, читаем и их (1406 * 8 = 11248). Далее пошли загадочные данные, с виду напоминающие веса костей для скелетной анимации (тем более что за этими данными следуют имена костей). Анимация нас пока не интересует, остановимся на достигнутом.

И так - мы теоретически прочитали геометрические данные модели, достаточные для того чтобы ее отобразить. Давайте проверим это, написав небольшую программку которая будет конвертировать модели в формате *.ds2md в *.obj который понимают большинство современных 3D-редакторов и просмотрщиков. Исходный код я приводить в статье не буду, он приаттачен в архиве в конце статьи.


Вот так выглядит сконвертированный OBJ файл импортированный в 3DS Max. Модель выглядит классно, однако на ней нет текстуры. Все текстуры находятся в директории gameres/textures в файле textures.pak. Распакуйте его куда вам удобно. Внутри вы обнаружите директорию $dds - именно здесь хранятся все текстуры используемые моделями. Тестуры хранятся в формате DDS, а в моделях текстуры значатся с расширением TGA - не обращайте внимание, скорее всего экспортер у разработчиков записывал использованные в материале текстуры, а при сборке ресурсов все текстуры конвертировались в DDS. В любом случае - внутри нашей модели гранаты записана текстура wpn_granaten01 - ищем ее в директории $dds - есть, вот она - wpn_granaten01.dds. Применим ее к нашей модели.


Отлично, значит мы правильно разобрали формат. Думаю что вам не составит труда на основе всего вышесказанного и исходного кода примера написать импортер для какого-нибудь 3D-редактора или самостоятельный просмотрщик. Надеюсь я дал достаточно общих приемов чтобы вы смогли дальше уже самостоятельно вскрывать более сложные форматы, а для примера можете взглянуть на код моей утилиты исследования ресурсов игры Need For Speed: Hot Pursuit по этой ссылке.

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

Share this with

These are external links and will open in a new window

These are external links and will open in a new window

Close share panel

The auditoriums of Nigeria's mega churches are empty and their gates are shut as they are forced to observe a government ban on large gatherings to halt the spread of coronavirus.

But it took not only threats, but force and arrests for the message to get across.

In some cases those in charge of making the churches bolt their doors turned to the scriptures.

"May I use the words of [Prophet] Mordechai: 'For such as time as this we do what is appropriate,'" said the leader of an enforcing team in the capital, Abuja, as he arrested a pastor in front of his congregation.

Dressed all in black, had he had a collar he would have passed for a preacher with his baritone voice and gesticulations.

The pastor he led out of the church, sporting a burgundy-coloured suit, shiny black shoes and with hair that glowed in the sun, looked like many of those who now lead huge congregations in the West African nation.

These preachers have changed the face of Christianity in Nigeria - with their evangelical sermons, prophecies and promises of miracles.

Conspiracy theories

One of the most famous of these is TB Joshua, who last month claimed to be divinely inspired, predicting that the coronavirus pandemic would be over by 27 March, several days before a lockdown was imposed on the states of Lagos, Ogun and the capital, Abuja.

"By the end of this month, whether we like it or not, no matter the medicine they might have produced to cure whatever, it will go the way it came," he said to applause from his congregation.

When 27 March passed the TV evangelist found himself mocked for his "false prophesy".

But he defended himself - once again to cheers from worshippers - by saying: "What I meant was that the virus would be halted where it began, and in Wuhan it has stopped."

Other pastors have been accused of flying in the face of the authorities and spreading fake news, impeding efforts to stop the spread of coronavirus.

The biggest controversy has been caused by Christ Embassy pastor Chris Oyakhilome, who in a video post that went viral, linked the virus to 5G networks and alleged that it was part of a plot to create a "new world order".

Such views have been widely condemned by scientists, who say the idea of a connection between Covid-19 and 5G is "complete rubbish" and biologically impossible.

Online prayer services

For some Christians, especially those who belong to the dwindling pews of the Anglican and Catholic churches, more needs to be done to weaken the influence of the mega pastors who exploit vulnerable people.

"Those that sell us the miracle waters, the holy oils and all that, this is the time to prove it," said Blessing Ugonna, a woman I met in Lagos.

But many of the mega churches, which run multi-million dollar business empires, have adapted to the changes brought about by the virus.

They are streaming prayer services online, and some families are trying to create an atmosphere at home by dressing up in their Sunday outfits with the head of the household even collecting "offerings" - or money - from the rest of the family to give to their church.

The churches are also making donations to the government and financially stricken worshippers in a move that is likely to see them retain popularity.

More on coronavirus in Africa:

Pastor Enoch Adeboye - the head of Redeemed Christian Church of God that has a branch in almost every street in mainly Christian cities and towns in southern Nigeria - has donated 200,000 hand gloves, 8,000 hand sanitisers, 8,000 surgical face masks to the Lagos state government..

And the Mountain of Holy Ghost Intervention Church - whose self-styled prophet Chukwuemeka Odumeje once caused a stir on social media for wrestling a congregant he claimed to be possessed by a demon - has earned some praise on Twitter for giving food to people who risk hunger during the two-week lockdown.

The devil you know is quite better than the Angel you don't know.

It doesn't matter how people see this man, Odumeje

Odumeje shared not less than 500 cartons of Indomie,3000 tubbers of yam, rice and other food items not only for his church members but anywhere you come. pic.twitter.com/moHfzVDPGu

End of Twitter post by @Lordattitudex

Empty streets on Holy week

Nevertheless, many Christians still yearn to go to church - and last Sunday was particularly difficult for them as it was Palm Sunday.

Usually, the streets of Lagos are packed on the day, with processions being held as the faithful wave palm leaves and re-enact Jesus' arrival in Jerusalem days before his crucifixion.

The streets were empty this year - just as they are likely to be over the Easter weekend.

But I did bump into a group of four - three women and a man - returning from a small service held in someone's home.

When I asked them why they had ignored advice to pray alone in their own homes, one of them replied: "Even the Bible said that where two or three are gathered, He is there in their midst. The Bible did not say one person."

'Prayer warriors'

I then went to the headquarters of the Mountain of Fire and Miracles Ministries, known for its intense prayer sessions, in Ogun state.

The security guards told me there was no service.


"Not even an online service?" I asked.

"Not even online," one of them, dressed in a lemon-coloured vest, replied.

"So how are people keeping the faith?" I inquired.

He dug into his bag and put a booklet into my hands.

"That's what they are reading while the lockdown lasts," he said, before walking away and shutting the gate with more force than was required.

The 60-page booklet was called Thirty Days Prayer Retreat - with recitations from the books of the Bible.

It will not be surprising if the "prayer warriors", as the church calls some of its worshippers, complete it during the 14-day lockdown, rather than in a month.

German medical officials credit country’s ability to conduct large number of tests with the low number of COVID-19 deaths compared to other European nations

  • Facebook
  • Twitter
  • linkedin
  • email
  • Print
  • 570 shares


BERLIN (AP) — Late last year — long before most people had heard of the new coronavirus now sweeping the globe — scientists in Germany sprang into action to develop a test for the virus causing an unusual respiratory disease in central China.

They had one by mid-January — and labs around the country were ready to start using it just weeks later, around the same time that Europe’s most populous country registered its first case.

“It was clear that if the epidemic swept over here from China, then we had to start testing,” said Hendrik Borucki, a spokesman for Bioscientia Healthcare, which operates 19 labs in Germany.

That quick work stands in stark contrast to delays and missteps in other countries. Coupled with Germany’s large number of intensive care beds and its early social distancing measures, it could explain one of the most interesting puzzles of the COVID-19 pandemic: Why people with the virus in Germany currently appear to be dying at much lower rates than in neighboring countries.


The numbers are remarkable: As confirmed cases in Germany passed 71,000 the death toll Wednesday was 775, according to a tally kept by Johns Hopkins University. In contrast, Italy has reported almost 106,000 infections and more than 12,400 deaths, while Spain has more than 96,000 cases, with more than 8,400 deaths.

France has four times as many virus deaths as Germany and Britain has twice as many, even though both countries have fewer reported infections.

There may be many factors at play, but experts said early on that fast and widespread testing gave Germany an edge.

He estimated that Germany is now capable of conducting up to 500,000 tests a week.

Spain, meanwhile, tests between 105,000 and 140,000 people each week, about 20% to 30% what Germany is capable of. Italy did around 200,000 tests over the past week, but that reflects a significant recent ramp-up.


Early access to the test from Drosten’s team is only part of the reason for Germany’s head start. Before the country even registered its first case, authorities agreed the tests would be covered by its universal insurance system, and be available to everyone with symptoms and either recent travel to virus hotspots or close contact with a confirmed case.

Still, Germany may not be as much of an anomaly as it seems. The fact that Spain and Italy — which have seen much more intense outbreaks — are doing fewer tests indicates they are missing many mild or asymptomatic cases. That makes their fatality rates look worse than they are. But Germany, too, is likely missing cases, and experts say that all figures worldwide undercount the extent of the pandemic.

Limited testing also means the true spread of the virus is hidden in those countries — further fueling the outbreak.

For most people, the new coronavirus causes mild or moderate symptoms. But for some, especially older adults and people with existing health problems, it can cause more severe illness and lead to to death.

Ensuring those severely ill patients can be treated properly is key to managing the outbreak — and preventing deaths.

And there again, Germany has an advantage.

Italy has 8.6 intensive care unit beds per 100,000 people, according to the Organization for Cooperation and Economic Development. By comparison, Germany has 33.9 per 100,000 for a total of about 28,000, a number the government wants to double.

“We are well prepared today, tomorrow and the day after tomorrow,” said Dr. Uwe Janssens, who heads Germany’s Interdisciplinary Association for Intensive Care and Emergency Medicine.


Hospitals in the hardest-hit areas of Italy are now buckling under the weight of treating so many ill patients at once, contributing the country’s death toll — the highest in the world.

In the rare position of having beds to spare, German hospitals have taken in dozens of patients from Italy and France. While that will allow German doctors and nurses to learn how to treat severely ill COVID-19 patients, it also reflects a remarkable confidence in the country’s ability to manage its outbreak at a time when many others are shutting their borders.

The Robert Koch Institute, Germany’s disease control center, has suggested that strong measures imposed almost three weeks ago, including closing schools and restaurants, and later barring more than two people from gathering outside, seem to have slowed the rate of new infections.

Experts have bemoaned that many countries took similar steps too late.

Scientists advising the British government say major social distancing measures are necessary before there are 0.2 deaths per 100,000 people. According to the imperfect data available, Italy imposed its lockdown four days after hitting that threshold but Germany’s came a week before that level was reached.


Officials stress Germany is still in an early stage of its outbreak. But Dr. Sebastian Johnston, a professor of respiratory medicine at Imperial College London, said countries that intervene early with aggressive measures should theoretically be able to avoid the tsunami of cases seen in Italy and Spain.

“We were lucky to have had a long time to prepare,” said Dr. Susanne Herold, a specialist for lung infections at the university hospital in Giessen. For weeks, her staff has been installing new ICU beds, training in the use of ventilators and planning for an emergency scenario.

Amid the cautious optimism, there are those who warn against complacency.

Chancellor Angela Merkel — who is herself in isolation after her doctor tested positive — has resisted calls to loosen the lockdown. A top government medical adviser, Lothar Wieler of the Robert Koch Institute, said he wouldn’t rule out Germany’s health system reaching its limit, too.

“This is still the calm before the storm,” Health Minister Jens Spahn said last week.

Known for its crushing crowds of tourists, Venice is now all but empty, as travelers cancel over coronavirus fears.


By Anna Momigliano

First came the flood, then came the disease.

Over the past three months, the tourism industry of Venice has had its share of plagues.

Flooding in November, prompted by exceptionally high tides, led to mass cancellations. Now as Italy experiences the biggest coronavirus outbreak outside Asia, a similar and unwelcome drop-off is occurring.

According to Associazione Venezia Albergatori, an association of local hotel owners, 50 percent of reservations in Venice have been canceled in the last week. “The situation is dramatic for the industry,” said Vittorio Bonacini, the chairman.

Mr. Bonacini estimates that since November, Venetian tourism, worth 3 billion euro or about $3.3 billion, “has probably lost 800 million euro.” Since the outbreak began on Feb. 21, he said, Venice hotels have lost almost 70 percent of their international visitors.

Once plagued by overtourism, Venice is now ghastly empty.

Many of its world-famous hot spots, including Campo Santa Margherita and the Jewish Ghetto, are deserted. Few tourists can be seen even in the usually packed St. Mark’s Square.

“It feels like one of those zombie movies with one guy walking in an empty New York,” said Matteo Secchi, a hotel receptionist. He said tourists scared off by the virus are canceling their reservation up to April. “One month like this it’s something we can deal with, but if this drags for months, people will get unemployed.”

Venice is hardly the epicenter of the coronavirus outbreak in Northern Italy, and no lockdown has been imposed on the city.

As of Thursday, 650 coronavirus cases have been confirmed in Italy, according to the country’s civil protection agency (the ministry of health’s count, which lags the civil protection numbers, is slightly lower). The vast majority are in Lombardy, where 11 villages and small towns have been fully quarantined and the regional capital Milan has self-imposed a lockdown, with schools, gyms and public offices closed, while pubs and cafes are subject to an on-and-off curfew.

In neighboring Veneto, the confirmed coronavirus cases are 71, said the civil protection agency. Its regional capital, Venice, has closed only its schools and museums.

And, of course, the last two days of the Venice Carnival were called off, making international headlines.

Some Venetians didn’t approve. “I am not sure keeping museums and school closed, while bars and restaurants are open, sends the right message,” said Nicola Ussardi, a local salesman and community activist. “Consumption is taking a precedent over culture.”

When Gov. Luca Zaia canceled the carnival, critics accused him of spreading unnecessary panic. “It was a tough decision,” Mr. Zaia told the local newspaper Corriere Del Veneto, “but we have to put Venetians’ health above everything else.”

As some countries, including Israel and Ireland, are advising their citizens not to travel to Italy because of the outbreak, Venice is not the only city struggling with tourism.

Milan postponed its Design Week, its largest international draw, and Rome has reported thousands of traveler cancellations.

Earlier this week Federalberghi, the country’s association of hotel owners, issued a statement asking the government for tax relief for the duration of the emergency. The association still doesn’t have a solid estimate on the outbreak’s impact on Italian tourism, but its president, Antonio Barreca, said cancellation rates “varied from 30 to 70 percent, depending on the city.”

But what sets Venice apart is that, unlike Rome and Milan, the city has almost no other source of income but tourism, and has already suffered a 35 percent cancellation rate in November, which raises some questions about the resilience and sustainability of its economic model.

“For ages, we staked everything on mass tourism,” said Mr. Ussardi, the community activist. “We really need to rethink that.”

Frequently Asked Questions and Advice

Updated April 11, 2020

This is a difficult question, because a lot depends on how well the virus is contained. A better question might be: “How will we know when to reopen the country?” In an American Enterprise Institute report, Scott Gottlieb, Caitlin Rivers, Mark B. McClellan, Lauren Silvis and Crystal Watson staked out four goal posts for recovery: Hospitals in the state must be able to safely treat all patients requiring hospitalization, without resorting to crisis standards of care; the state needs to be able to at least test everyone who has symptoms; the state is able to conduct monitoring of confirmed cases and contacts; and there must be a sustained reduction in cases for at least 14 days.

The Times Neediest Cases Fund has started a special campaign to help those who have been affected, which accepts donations here. Charity Navigator, which evaluates charities using a numbers-based system, has a running list of nonprofits working in communities affected by the outbreak. You can give blood through the American Red Cross, and World Central Kitchen has stepped in to distribute meals in major cities. More than 30,000 coronavirus-related GoFundMe fund-raisers have started in the past few weeks. (The sheer number of fund-raisers means more of them are likely to fail to meet their goal, though.)

If you’ve been exposed to the coronavirus or think you have, and have a fever or symptoms like a cough or difficulty breathing, call a doctor. They should give you advice on whether you should be tested, how to get tested, and how to seek medical treatment without potentially infecting or exposing others.

The C.D.C. has recommended that all Americans wear cloth masks if they go out in public. This is a shift in federal guidance reflecting new concerns that the coronavirus is being spread by infected people who have no symptoms. Until now, the C.D.C., like the W.H.O., has advised that ordinary people don’t need to wear masks unless they are sick and coughing. Part of the reason was to preserve medical-grade masks for health care workers who desperately need them at a time when they are in continuously short supply. Masks don’t replace hand washing and social distancing.

If you’re sick and you think you’ve been exposed to the new coronavirus, the C.D.C. recommends that you call your healthcare provider and explain your symptoms and fears. They will decide if you need to be tested. Keep in mind that there’s a chance — because of a lack of testing kits or because you’re asymptomatic, for instance — you won’t be able to get tested.

It seems to spread very easily from person to person, especially in homes, hospitals and other confined spaces. The pathogen can be carried on tiny respiratory droplets that fall as they are coughed or sneezed out. It may also be transmitted when we touch a contaminated surface and then touch our face.

No. Clinical trials are underway in the United States, China and Europe. But American officials and pharmaceutical executives have said that a vaccine remains at least 12 to 18 months away.

Unlike the flu, there is no known treatment or vaccine, and little is known about this particular virus so far. It seems to be more lethal than the flu, but the numbers are still uncertain. And it hits the elderly and those with underlying conditions — not just those with respiratory diseases — particularly hard.

If the family member doesn’t need hospitalization and can be cared for at home, you should help him or her with basic needs and monitor the symptoms, while also keeping as much distance as possible, according to guidelines issued by the C.D.C. If there’s space, the sick family member should stay in a separate room and use a separate bathroom. If masks are available, both the sick person and the caregiver should wear them when the caregiver enters the room. Make sure not to share any dishes or other household items and to regularly clean surfaces like counters, doorknobs, toilets and tables. Don’t forget to wash your hands frequently.

Plan two weeks of meals if possible. But people should not hoard food or supplies. Despite the empty shelves, the supply chain remains strong. And remember to wipe the handle of the grocery cart with a disinfecting wipe and wash your hands as soon as you get home.

That’s not a good idea. Even if you’re retired, having a balanced portfolio of stocks and bonds so that your money keeps up with inflation, or even grows, makes sense. But retirees may want to think about having enough cash set aside for a year’s worth of living expenses and big payments needed over the next five years.

Watching your balance go up and down can be scary. You may be wondering if you should decrease your contributions — don’t! If your employer matches any part of your contributions, make sure you’re at least saving as much as you can to get that “free money.”

Читайте также:

Пожалуйста, не занимайтесь самолечением!
При симпотмах заболевания - обратитесь к врачу.

Copyright © Иммунитет и инфекции