Итак, для начала вспомним, что такое Cracked IPA - это IPA файл, с программой (!!!) в которой удален "CryptID" т.е. та часть в которой содержатся сведения с какого аккаунта была произведена покупка, если его удалить, то Tunes не сможет спросить авторизацию, т.к. не будет знать к чему. Правда в таких ситуациях если он не может узнать кем куплена программа возникает ошибка авторизации, которая в свою очередь лечится installd и AppSync. Далее я привиду несколько примеров программ которые помогут вам "отвязать" программы от своего аккаунта, дабы можно было поделится ими с друзьями.
[HR="1"][/HR]
poedCrack
[HR="1"][/HR] Разработка Австралийской хакерши poedGirl, которая в прочем активно сотрудничает с командой Hackolous'а. Мой личный выбор, из плюсов данного продукта отмечу его возможность работать с "Fat Binary" т.е. расшифровывать большие программы (но сразу замечу - эта функция доступна только iPhone 3Gs и ipod Touch 3G - другим на это несколько не хватает оперативной памяти)
GUI версия
Разработана andydam на основе poedCrack. Это именно GUI оболочка, а не самостоятельная программа, т.е. работать без установленной CLI версии она не будет. Конечно, красиво, довольно удобно, но из-за GUI версии возникают проблемы при использовании CLI. Именно GUI оболочка - причина самой распространенной проблемы "Unable to find CryptSize" (как ее лечить, читайте дальше). Ах, да программа спрашивает у вас ник того кто взломал программ... правда куда он исчезает - еще предстоит разгадать. Устанавливать довольно легко: сначала ставим CLI версию, а потом deb пакет. (скачать их можно ниже)
CLI версия
CLI версия poedCrack используется как и любая другая консольная программа, через Terminal. Устанавливаем ее так: 1)Проверяем, установлены ли у нас зависимости через Cydia, если необходимо доставляем необходимые. 2)Копируем файл poedCrack в //bin/ 3)Назначаем права на файл 777 root:wheel Используем ее так:
poedCrack %Application_name%
Важно: -Имя взламываемого приложения должно писаться как название папки app в которой он лежит Пример: программа на спрингборде и в AppStore называется Run!, но в файловой системе - //var/mobile/Applications/A92001BB-F4D1-4E90-8FCF-CC193CBE3FBF/RunCocos2D.app, а значит команда будет выглядит как:
poedCrack RunCocos2D
-Если в имени приложения есть пробел, то оно должно писаться между ковычек Пример:
poedCrack "Run Cocos 2D"
-Если возникает ошибка
/bin/poedCrack: fork: retry: Resource temporarily unavailble Unable to find CryptSize
Необходимо удалить файл poedCrack из //bin, перезагрузить девайс, вернуть poedCrack на место, назначить повторно права.
* adv-cmds * coreutils * coreutils (/bin) * Erica Utilities * Link Idenitity Editor * Darwin CC Tools * GNU Debugger/gdb * Core Utilities * gawk * APT 0.6 Transitional * zip
[HR="1"][/HR]
Crackulous
[HR="1"][/HR] Программа, явно заслуживающая доверия, хотя бы за то что сделана она авторами AppSync, Install0us, AppTrackr. Этим все сказано. Регулярно обновляется, по этому минусов становится все меньше и меньше...Отлично интегрирована с рабочими утилитами Cydia... в общем минус только один - и он точно такой же какой и плюс - Hackolous, они уже давно поняли на что способны по этому стали требовать денежку за самые вкусные плюшки... Так например новая Crackulous 1.0 RC1 Beta доступна только тем кто не поленится внести 30$ жертвоприношений в кошелек ресурса... Как я уже говорил программа оснащена обычным GUI интерфейсом, немного более толстым чем у poedCrack, но принцип работы тот-же выбрал приложение - нажал - Crack.
С технической точки зрения программа использует последнюю версию xCrack, но опять же это весьма двоякое утверждение, ибо изначально она была разработана для 2.2.1, а потом буквально за уши вытащена на 3.0... вроде бы опыт накопленный с прошивки 2.2, а вроде бы, те ошметочки которые остались... Ну это конечно никто не скрывал, и первое время после выхода 3.0 Craculous был вовсе не жизнеспособен... прошло время, проблему пофиксили, но насколько удачно вам никто не скажет...
Из разряда интересно, но не нужно - Crackulous способен взламывать сразу несколько приложений.... вот только зачем? -_-
Зависимости:
Erica Utilities
GNU Debugger
Darwin CC Tools
Link Identity Editor
Source GUI
zip
Gawk
Скачать и установить deb пакет можно самым простым и привычным способом из репозитория сами_знаете_кого. А, и рекомендую использовать его только вместе с Install0us... может рекламный ход, может очередной баг, но некоторые приложения взломанные Кракулусом, установяться только через него.
[HR="1"][/HR]
AppCrack
[HR="1"][/HR] AppCrack - приложение появившееся сразу после выхода 3.0, сначала ему грезили стать приемником Crackulous'а, который в то время все еще не работал с третьей версией прошивки, но этого так и не произошло, он сам наступил на грабли своего предшественника - как только вышла 3.1 он выпал из жизни, слишком много ошибок возникало с взломом новой DRM v0.7 которая появилась в приложениях после 3.1, благо сейчас все несколько наладилось, и хоть некоторый коэффициент неудач остался, AppCrack снова может взламывать.
GUI версия
Ну смысла сильно распинатся о ней не вижу... Ибо ее автор --> andydam, точно такой же как у poedCrack GUI... разница в том, что если к poedCrack он выпустил только графическую оболочку, то в AppCrack он приложил руку еще и к скрипту... хотя тоже лишь от части -> Автор CLI версии AppCrack - MadHouse. Сам интерфейс - по классу эконом. До выхода второй беты были страшные проблемы с отображением программ, но сейчас их вроде как и пофиксили.
Найти deb пакет GUI версии вы можете в нашем репозитории.
CLI версия
Скрипт написаный MadHouse, внешне ничем не отличается от poedCrack... вообще по секрету они практически не отличаются - только вот AppCrack в отличии от детища poedGirl не может работать с Fat Binnary, по этому довольно неважно взламывает новые и большие приложения... Но коль пошла такая пьянка, то упомянем и про этот скрипт. 1)Скачиваем 2)Перетаскиваем в /usr/bin/ 3)Ставим права 777
Команда:
AppCrack %App_name% %user_name%
Пример:
AppCrack RunCocos2D Comb
Зависимости
Erica Utilities
Darwin CC Tools
GNU Debugger
Core Utilities
gawk
APT 0.6 Transitional
SQLite 3.x
SQLite 3.x Libraries
zip
[HR="1"][/HR]
AppBox
[HR="1"][/HR] Замена Instal0us'а... Уже интересно? В принципе да, логически предположим что коли это замена Install0us'а, то и Craculous под нее тоже попадет? Кто знает... если судить о перспективах программы сейчас, то бушующее у нее определенно есть... Но явно не по тому что он лучше взламывает - а по тому что это несколько программ в одной. За основу Крака в ней взят немного дописанный скрипт AppCrack. Плюшка? Нет. Симбеоз - AppBox есть вторая попытка AppCrack'а придти на замену Crackulous'у. В первый раз когда Crackulous приостановился в развитии, это не вышло, помешал Install0us... Сейчас когда Install0us прекратил развиваться, почему бы не попытаться забрать его лавры себе? Шансы есть, осталось лишь найти желание разработчиков... Внедрить в AppBox Updatr, дабы возместить то чего все ждали от Install0us 3.0, и продолжать развивать AppCrack в сторону новых систем DRMv0.7 и Fat Binnary. Ну чтож будем ждать и уповать на обновления.
Скачать deb пакет можно из нашего репо... вот только не утомитесь с зависимостями... Во первых AppBox нуждается во всех пакетах Install0us'а... А во вторых сам скрипт для кряка нуждается еще и в своих: И итого у нас получается нехилый списочек:
Erica Utilities
Darwin CC Tools
GNU Debugger
Core Utilities
gawk
APT 0.6 Transitional
SQLite 3.x
SQLite 3.x Libraries
zip
unzip
UUID Generator
OpenSSL
cURL
sed
[HR="1"][/HR]
DeCript (IDCrack)
[HR="1"][/HR] Оооо да... Куда же мы без OpenSource скрипта, следующий метод для или просто любопытных, или ТрутЪ Хакеров. Во первых, этот способ не требует каких либо конкретных программ, т.е. так можно взламывать даже на S_Light Custom'ах. Во вторых, в этом способе открытый код - можете сами его поправить или дописать.
Для взлома нужны пакеты:
com.ericasadun.utilities
gdb
gawk
zip
ldid
odcctools
Взлом делается в два шага: 1)Найти программу
find /var/mobile/Applications/ -iname *.app
2)Взломать программу.
./DCrypt.sh "Monkey Ball"
Как вы уже видите будет использоваться скрипт DCript.sh
DCript.sh
#!/bin/sh
#
# DeCrypt - v1.1
# - v1.1 (2008-10-21)
#
# Heavily based on xcrack
#
# Many thanks to:
# puy0, SaladFork, Flox, Flawless
#
echo "DeCrypt 1.1"
echo "FloydianSlip"
echo "iGuides.ru"
echo
if [ ! -e /usr/bin/plutil ]; then
echo "Cannot find plutil (apt-get install com.ericasadun.utilities)"
exit 1
fi
if [ ! -e /usr/bin/gdb ]; then
echo "Cannot find gdb (apt-get install gdb)"
exit 1
fi
if [ ! -e /usr/bin/otool ]; then
echo "Cannot find otool (apt-get install odcctools)"
exit 1
fi
if [ ! -e /usr/bin/ldid ]; then
echo "Cannot find otool (apt-get install ldid)"
exit 1
fi
if [ ! -e /usr/bin/awk ]; then
echo "Cannot find awk (apt-get install gawk)"
exit 1
fi
if [ ! -e /usr/bin/zip ]; then
echo "Cannot find zip (apt-get install zip)"
exit 1
fi
if [ $# -ne 1 ]; then
echo "Usage: $(basename $0) <ApplicationName>"
echo
exit 1
fi
AppInput=$1
if [ -d "$AppInput" ]; then
tempLoc=$AppInput
else
echo "Locating $AppInput"
tempLoc=$(find /var/mobile/Applications -iname "$AppInput.app")
if [ -z "$tempLoc" ]; then
echo "Unable to locate $AppInput"
exit 1
fi
AppCount=$(find /var/mobile/Applications -iname "$AppInput.app" | wc -l)
if [ $AppCount -gt 1 ]; then
echo "Found two installation directories:"
find /var/mobile/Applications -iname "$AppInput.app"
exit 1
fi
fi
AppPath=$(dirname "$tempLoc")
AppName=$(basename "$tempLoc")
AppExec=$(plutil -v CFBundleExecutable "$tempLoc/Info.plist" 2>&1 | awk -F "] " '{ print $2 }')
AppVer=$(plutil -v CFBundleVersion "$tempLoc/Info.plist" 2>&1 | awk -F "] " '{ print $2 }')
AppDisplayName=$(plutil -v CFBundleDisplayName "$tempLoc/Info.plist" 2>&1 | awk -F "] " '{ print $2 }')
if [ ! -d "$AppPath" ]; then
echo "Unable to locate original installation directory"
exit 1
fi
if [ ! -d "$AppPath/$AppName" ]; then
echo "Unable to locate .app directory"
exit 1
fi
if [ ! -e "$AppPath/$AppName/$AppExec" ]; then
echo "Unable to locate executable"
exit 1
fi
echo "Found $AppName"
echo "Creating directories"
WorkDir="/tmp/DecryptApp-$(date +%Y%m%d-%H%M%S)"
NewAppDir="$HOME/Documents/Decrypted"
if [ -e "$WorkDir" ]; then
rm -rf "$WorkDir"
fi
mkdir -p "$WorkDir"
if [ ! -e "$NewAppDir" ]; then
mkdir -p "$NewAppDir"
fi
if [ ! -d "$WorkDir" -o ! -d "$NewAppDir" ]; then
echo "Unable to create Directories"
exit 1
fi
echo "Copying application files"
cp -a "$AppPath/$AppName/" "$WorkDir/"
if [ ! -e "$WorkDir/$AppName/$AppExec" ]; then
echo "Unable to copy application files"
rm -fr "$WorkDir"
exit 1
fi
echo "Analyzing application"
CryptID=$(otool -l "$WorkDir/$AppName/$AppExec" | grep cryptid | awk '{print $2}')
if [ $CryptID -ne "1" ]; then
echo "Application is not encrypted"
rm -fr "$WorkDir"
exit 1
fi
CryptSize=$(otool -l "$WorkDir/$AppName/$AppExec" | grep cryptsize | awk '{print $2}')
if [ ! $CryptSize ]; then
echo "Unable to find CryptSize"
rm -fr "$WorkDir"
exit 1
fi
CryptOff=$(otool -l "$WorkDir/$AppName/$AppExec" | grep cryptoff | awk '{print $2}')
if [ ! $CryptOff ]; then
echo "Unable to find CryptOff"
rm -fr "$WorkDir"
exit 1
fi
echo "Locating and patching CryptID"
# "/System/Library/Frameworks" in hex
PathAsHex="2f53797374656d2f4c6962726172792f4672616d65776f726b73"
# - Convert to hex on 1 long line, only take stuff before the path string,
# - Convert to 1 byte set per line, find 0x01 (line number is offset in the real file),
# - Strip newlines, reverse the order
oneLocations=($(od -A n -t x1 -v "$WorkDir/$AppName/$AppExec" | \
tr -d ' ','\n' | \
sed "s/$PathAsHex.*\$//" | \
sed "s/../&\n/g" | \
grep -n -s 01 | \
cut -d : -f 1 | \
sort -nr | \
tr "\n" " "))
for TryOffset in "${oneLocations[@]}"; do
cp -a "$WorkDir/$AppName/$AppExec" "$WorkDir/$AppName/$AppExec.trying"
foo=$(echo -ne "\x00" | dd bs=1 seek=$((TryOffset - 1)) conv=notrunc status=noxfer of="$WorkDir/$AppName/$AppExec.trying" 2>&1> /dev/null)
cid=$(otool -l "$WorkDir/$AppName/$AppExec.trying" | grep cryptid | awk '{print $2}')
if [ $cid -eq 0 ]; then
break
fi
rm "$WorkDir/$AppName/$AppExec.trying"
done
if [ ! -e "$WorkDir/$AppName/$AppExec.trying" ]; then
echo "Unable to find CryptID"
rm -fr "$WorkDir"
exit 1
fi
mv "$WorkDir/$AppName/$AppExec.trying" "$WorkDir/$AppName/$AppExec"
echo "Dumping unencrypted data from application"
echo -e "set sharedlibrary load-rules \".*\" \".*\" none\r\n\
set inferior-auto-start-dyld off\r\n\
set sharedlibrary preload-libraries off\r\n\
set sharedlibrary load-dyld-symbols off\r\n\
handle all nostop\r\n\
break *0x2000\r\n
commands 1\r\n\
dump memory $WorkDir/dump.bin 0x2000 $(($CryptSize + 0x2000))\r\n\
kill\r\n\
quit\r\n\
end\r\n\
start" > $WorkDir/batch.gdb
foo=$(gdb -q -e "$AppPath/$AppName/$AppExec" -x $WorkDir/batch.gdb -batch 2>&1> /dev/null)
rm $WorkDir/batch.gdb
echo "Verifiying data dump"
DumpSize=$(stat -c%s "$WorkDir/dump.bin")
if [ "$DumpSize" != "$CryptSize" ]; then
echo "Memory dump is not the right size or does not exist"
rm -fr "$WorkDir"
exit 1
fi
echo "Replacing encrypted data with data dump"
foo=$(dd seek=4096 bs=1 conv=notrunc if="$WorkDir/dump.bin" of="$WorkDir/$AppName/$AppExec" 2>&1> /dev/null)
rm "$WorkDir/dump.bin"
echo "Signing the application"
foo=$(ldid -s "$WorkDir/$AppName/$AppExec" 2>&1> /dev/null)
plutil -s 'SignerIdentity' -v 'Apple iPhone OS Application Signing' "$WorkDir/$AppName/Info.plist" 2>&1> /dev/null
if [ -e "$WorkDir/$AppName/SC_Info" ]; then
echo "Removing SC_Info"
rm -fr "$WorkDir/$AppName/SC_Info"
fi
if [ -e "$WorkDir/$AppName/_CodeSignature" ]; then
echo "Removing _CodeSignature"
rm -fr "$WorkDir/$AppName/_CodeSignature"
fi
if [ -h "$WorkDir/$AppName/CodeResources" ]; then
echo "Removing CodeResources"
rm -fr "$WorkDir/$AppName/CodeResources"
fi
if [ -e "$WorkDir/$AppName/ResourceRules.plist" ]; then
echo "Removing ResourceRules.plist"
rm -fr "$WorkDir/$AppName/ResourceRules.plist"
fi
echo "Building .ipa"
mkdir -p "$WorkDir/Payload"
if [ ! -e "$WorkDir/Payload" ]; then
echo "Failed to create Payload directory"
rm -fr "$WorkDir"
exit 1
fi
mv "$WorkDir/$AppName" "$WorkDir/Payload/"
echo "Copying iTunesArtwork"
if [ -e "$AppPath/iTunesArtwork" ]; then
cp -a "$AppPath/iTunesArtwork" "$WorkDir/"
else
echo "Unable to find iTunesArtwork"
fi
echo "Compressing the .ipa"
IPAName=$NewAppDir/$(echo $AppDisplayName | sed -e "s: :_:g")-v$AppVer.ipa
cd "$WorkDir"
zip -m -r "$IPAName" * 2>&1> /dev/null
cd - 2>&1> /dev/null
if [ ! -e "$IPAName" ]; then
echo "Failed to compress the .ipa"
rm -fr "$WorkDir"
exit 1
fi
echo "Removing temporary files"
rm -rf "$WorkDir"
echo "Done"
echo "Created decrypted .ipa at $IPAName"
Используя этот метод можно отдельно сохранить IDCrypt используя примочку - AppExec, который так же можно сжать используя AdHoc Helper
AdHoc Helper
otool -l `find /var/mobile/Applications -iname AdHoc` | grep cryptsize
output-> cryptsize 8192
# get the cryptsize say 8192
gdb `find /var/mobile/Applications -iname AdHoc`
(gdb) b *0x2000
Breakpoint 1 at 0x2000
(gdb) r
(gdb) x/20i 0x2000
(gdb) dump binary memory /var/root/dump.bin 0x2000 (0x2000+8192)
(gdb) kill
Kill the program being debugged? (y or n) y
(gdb) quit
cd /var/root/
cp `find /var/mobile/Applications -iname AdHoc` .
dd seek=4096 bs=1 conv=notrunc if=dump.bin of=AdHoc
[HR="1"][/HR]
Советы мастеров
[HR="1"][/HR]
Совет №1 Вставляем картинку с лого
Как я думаю все знают, есть три типа людей: Первые - Хакеры, на белых конях, которые покупают программы и взламывают их для всех... Вторые - Пользователи, просто любят Хакеров, за все счастье, что они принесли. И этой благодарности Хакерам хватает. Третьи - Комунисты... которые просто перекидывают чужие крями с ресурса на ресурс... Но это конечно не значит, что они поголовно "просто_не_хорошие_люди", большенство из них - просто распространяют труды хакеров.... но ведь есть и те кто хотят себе кусок пирога... Лично я считаю долгом защищать приложения от них. Как правило такие люди не важно знакомы с понятием взлома, и архитектурой IPA, по этому самая элементарная защита - уже хорошо. Мы например будем использовать картинку. Все предельно просто - перед тем как взламывать приложение, вам надо найти в его рабочей папке (//va/mobile/****-****-****-****/%Application%.app/) картинку которая используется при загрузке, и отредактировать ее.
Важно: -Редактировать необходимо на компьютере. -Изменять размер изображения нельзя. -Нельзя нарушать альфа канал PNG (прозрачность)
Чтобы всего этого избежать советую использовать Photoshop или тем кто не особо с ним дружит - Paint.NET. Т.е. в графическом редакторе мы просто открываем ниже приведенное лого как новый слой изображения. Смотрим как выглядит, при необходимости стираем какие-либо детали на оригинале. Сливаем слои. Сохраняем в том же формате в каком было оригинальное изображение (Глубину цвета ставим на Авто, порог прозрачности - 128) При особой необходимости используем программу iphonePNG.
Лого iGuides
Совет №2 Побеждаем всплывающие окна.
Всплывающие окна стали весьма не хилой защитой в приложениях... например все помнят Comic Reader Mobi который очень долго никому не удавалось победить... все дело было в постоянно всплывающем окне, что версия - пиратская. Как ее тольео люди не пытались бить... и вырывали целые куски кода, что приводило к тому что программа работала ровно 10-15 минут, удаляли окошечко - теперь оно не мешало читать, но вот управление все равно отключалось... Но способы есть. Для начала поймем суть проблемы - UDID (Unique Device IDentifier)- Уникальный Идентификационный Номер Устройства. Суть в том что программа отправляет его на свой сервер чтобы проверить, а покупали ли программу с этого устройства? И если на сервере нет записи об этой покупке - дяденька, идите лесом. Но, почему бы тогда не сообщать серверу "Правильный ID"? Тут есть одна преграда. Обходить ее или нет - дело самого Хакера. А наше дело объяснить как это сделать. 1) Необходимо узнать свой ID, т.е. тот с которого была совершена покупка. Но не забываем что ID - номер устройства. А покупка производится с учетной записи, которая не привязана к девайсу. Вариант, что UDID попадает на сервер разработчика при покупке отпадает: при покупке нет никакой возможности угадать на какой девайс будет установлена программа, и узнать его UDID невозможно. Кроме того по пользовательскому соглашению приватности Apple не имеет права передавать какую-либо информацию разработчикам. Это уже очень хорошо! Просто поверте на слово, что это очень хорошо... 2)Раз первый вариант отпал, остается только второй - UDID попадает к разработчику при первом включении программы. А это воовсе замечательно!
Теперь правда немного о том как мы будем обманывать. тут нам поможет программа из Сидии UDIDFaker, кажись лежала в Репозитории Саурика. Суть ее в том что она позволяет менять UDID для определенной программы, т.е. перехватывает запрос программы и отвечает тем идентификатором, который ввел пользователь. Итого: мы можем менять UDID для любой программы, т.е. мы можем отправить на сервер любой ID номер какой захотим. И при этом будем его знать... Ну а коли мы знаем какой UDID считается у разработчика лицензионным, что нам мешает сообщать его же, но уже с другого устройства? Ну думаю первичный смысл всем понятен: -Заменил UDID. -Включил программу, дабы она отослала запрос на сервер. -Взломал CryptID, отвязал от Аккаунта. -Установил на другой девайс -Заменил UDID, на тот который использовался в первый раз. -Включил программу, словил счастье.
А теперь о проблемах которые могут возникать:
Вариант №1 - UDID прописывается в файл CryptID, и стало быть на конечном устройстве UDIDFaker не нужен, он даже не будет спрашивать. НО все не так хорошо как казалось бы. Не забываем что CryptID удаляется в ходе отвязки от аккаунта, а значит программа отправит пустой запрос на сервер, и программа снова будет пиратской. Выходи из проблемы - Использовать DCrypt настроенный чтобы не полностью удалять IDCrypt.
Вариант №2 - Вместе с UDID, на сервер отправляется ECID (просто другие идентификаторы отправлять - незаконно). А вот ECID уже подделать не удастся...
[admin="fox_sash"]
Ждем также советов наших "бывалых" релизеров Будем пополняться и развиваться!
Ответы