Skip to content
This repository has been archived by the owner on Sep 27, 2022. It is now read-only.

Commit

Permalink
rename ReadCache ParseCache
Browse files Browse the repository at this point in the history
comment private test
use little endian in FullLen
do not export data field to json
  • Loading branch information
atilaromero committed Mar 18, 2019
1 parent 6e5108b commit fefb1cb
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 43 deletions.
16 changes: 8 additions & 8 deletions tdata/decrypted/cache.go → tdata/decrypted/parse.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ func unpack(r io.Reader, data interface{}) (err error) {
return struc.Unpack(r, data)
}

func ReadCache(data []byte, keytype uint32) (interface{}, error) {
func ParseCache(data []byte, keytype uint32) (interface{}, error) {
r := bytes.NewReader(data)
switch LSK[keytype].(type) {
case Audios:
Expand All @@ -46,7 +46,7 @@ func ReadCache(data []byte, keytype uint32) (interface{}, error) {
}
for {
location := Location{}
err := readField(r, reflect.Indirect(reflect.ValueOf(&location)))
err := parseField(r, reflect.Indirect(reflect.ValueOf(&location)))
if err == io.ErrUnexpectedEOF || err == io.EOF {
break
}
Expand Down Expand Up @@ -83,7 +83,7 @@ func ReadCache(data []byte, keytype uint32) (interface{}, error) {
if err != nil {
return result, errors.Wrap(err, "error parsing cache file")
}
err = readUserSetting(r, &result, blockID)
err = parseUserSetting(r, &result, blockID)
if err != nil {
return result, errors.Wrap(err, "error parsing cache file")
}
Expand All @@ -94,20 +94,20 @@ func ReadCache(data []byte, keytype uint32) (interface{}, error) {
}
}

func readUserSetting(r *bytes.Reader, result *UserSettings, blockID uint32) error {
func parseUserSetting(r *bytes.Reader, result *UserSettings, blockID uint32) error {
fieldName, ok := DBI[blockID]
if !ok {
return fmt.Errorf("blockID not found: %v", blockID)
}
field := reflect.Indirect(reflect.ValueOf(result)).FieldByName(fieldName)
err := readField(r, field)
err := parseField(r, field)
if err != nil {
return fmt.Errorf("error: %v: %v", fieldName, err)
}
return nil
}

func readField(r *bytes.Reader, field reflect.Value) error {
func parseField(r *bytes.Reader, field reflect.Value) error {
switch field.Kind() {
case reflect.Struct:
switch field.Interface().(type) {
Expand All @@ -126,7 +126,7 @@ func readField(r *bytes.Reader, field reflect.Value) error {
return nil
default:
for i := 0; i < field.NumField(); i++ {
readField(r, field.Field(i))
parseField(r, field.Field(i))
}
}
case reflect.Slice:
Expand Down Expand Up @@ -155,7 +155,7 @@ func readField(r *bytes.Reader, field reflect.Value) error {
}
slice := reflect.MakeSlice(field.Type(), int(len), int(len))
for i := 0; i < int(len); i++ {
readField(r, slice.Index(i))
parseField(r, slice.Index(i))
}
field.Set(slice)
return nil
Expand Down
49 changes: 24 additions & 25 deletions tdata/decrypted/cache_test.go → tdata/decrypted/parse_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import (
"encoding/hex"
"encoding/json"
"fmt"
"io/ioutil"
"os"

"github.com/atilaromero/telegram-desktop-decrypt/tdata"
Expand All @@ -17,7 +16,7 @@ const hexImage = "54444624ff4d0f00000002909c8a84b063c3cd78ef081d3eec229e8e43aee2

const hexKey = "4dd3f7947d2f92c5802f2e05cb27520e6a169cdffc071cfcecb2c60c6b1b14152e52afeb5f6e224bb609389187e10d8ed78e6fd8688121783c0ce4dccf816c1e0da13b974d52974b23a7601059393b9f78f0d238c13a957e8da4495d42f4e8be233ef04f08ba9603a681b709512cb2b2b60fb81f4ac515f81fb3d9ed85227732e267ba4d0b005e2df1fcb8afbfc751186b381cc917a9eb665ac1e555a9742acf848756b665164ad6918e578c21fd72c94db48fe291626932e6498d3786b8db45d172acc2b223bd2694dc36d8c219795619018c7adeb6bbbee9b74d28dbf3c1ec87be76da05e6d67cff34dc491c9c88e2d2b4fbdf4637d1bcedfbafb2c8cf0cf34fb82034b1afcad38ee310ce"

func ExampleReadCache() {
func ExampleParseCache() {
image0, err := hex.DecodeString(hexImage)
if err != nil {
fmt.Println(1, err)
Expand All @@ -38,7 +37,7 @@ func ExampleReadCache() {
if err != nil {
fmt.Println(5, err)
}
cache, err := ReadCache(data, ReverseLSK(Images{}))
cache, err := ParseCache(data, ReverseLSK(Images{}))
if err != nil {
fmt.Println(6, err)
}
Expand All @@ -52,13 +51,13 @@ func ExampleReadCache() {
// ffd8ffe000104a46494600010101004800480000ffdb0043000e0a0b0d0b090e0d0c0d100f0e11162417161414162c20211a24342e3736332e32323a4153463a3d4e3e32324862494e56585d5e5d3845666d655a6c535b5d59ffdb0043010f10101613162a17172a593b323b5959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959ffc00011080020005a03012200021101031101ffc400190000030101010000000000000000000000010204030007ffc400351000010302020705050900000000000000010002110312043105132141515291227192a1d2233233d1f042536162638193b1e1ffc40014010100000000000000000000000000000000ffc4001511010100000000000000000000000000000011ffda000c03010002110311003f00f49424252e9902d3fba59a633b5a78142b491c576c3b2520b098007447b0d76401ee409a81f79533e64daafceff126b9bcc3aaeb9bcc3aa0cf51fa957c4b502042ecd720e596b2adf1632d9ceedcb5201cc4a018d19040a5ce00ec64ee177f89c64858de099023410609247926fac966e6bc35e581ae7fd9b8c058df8d9f8543f91de9414900882011f884440c879294d4c5813aaa3dd7bbd281763af814f0f11bdeef920afeb25ca51531b13a9a1ddac77a5173f1922da34403c6a3bd2837820f6623815d2e8f776f9292ed2371ec616d0799d97446ec7961f678704e46f76cef1082a17ef0d464f2a901d21116618bb8dce8fe90bf48449a787f13fe482c93b9bd51513ce91221a30cd24672e31e4aca61c29b43c82f81711bca0fffd9
}

func ExampleReadCache_a() {
func ExampleParseCache_a() {
data, err := hex.DecodeString("ac0200000000000500000000000000210000000000000038000000010000002200000e10000000130000000100000052000000010000005100000001000000080000000100000031000000010000000b000000010000001c00000000000000440000000000000045000000030000004600000002000000140000000000000033ffffffffffffffff0000002300000030002f0068006f006d0065002f006100740069006c0061002e0061006c0072002f0050006900630074007500720065007300000029000dbba000000042000dbba0000000340000000000000000000000000000004000000000000000000000004100000000000000370000000100000049000000000000004d0000003800000000000000000000000000000000000000000000000100000004000000000000000000000000000735b700000000ffffffff000000000000003a0000002200000004d83dde02000100000004d83dde180001000000022764000100000004d83dde0d000100000004d83dde0a000100000004d83dde01000100000004d83ddc4d000100000002263a000100000004d83dde14000100000004d83dde04000100000004d83dde2d000100000004d83ddc8b000100000004d83dde12000100000004d83dde33000100000004d83dde1c000100000004d83dde48000100000004d83dde09000100000004d83dde03000100000004d83dde22000100000004d83dde1d000100000004d83dde31000100000004d83dde21000100000004d83dde0f000100000004d83dde1e000100000004d83dde05000100000004d83dde1a000100000004d83dde4a000100000004d83dde0c000100000004d83dde00000100000004d83dde0b000100000004d83dde06000100000004d83ddc4c000100000004d83dde10000100000004d83dde1500010000003b0000000000000026000000003ab23fdf")
if err != nil {
fmt.Println(err)
}
code := ReverseLSK(UserSettings{})
cache, err := ReadCache(data, code)
cache, err := ParseCache(data, code)
if err != nil {
fmt.Println(err)
}
Expand All @@ -67,23 +66,23 @@ func ExampleReadCache_a() {
// {"FullLen":684,"DbiDcOptionOldOld":{"DcId":0,"Host":"","IP":"","Port":0},"DbiDcOptionOld":{"DcIdWithShift":0,"Flags":0,"IP":"","Port":0},"DbiDcOptions":{"Serialized":null},"DbiChatSizeMax":0,"DbiSavedGifsLimit":0,"DbiStickersRecentLimit":0,"DbiStickersFavedLimit":0,"DbiMegagroupSizeMax":0,"DbiUser":{"UserId":0,"DcId":0},"DbiKey":{"DcId":0,"Key":null},"DbiMtpAuthorization":{"Serialized":null},"DbiAutoStart":0,"DbiStartMinimized":0,"DbiSendToMenu":0,"DbiUseExternalVideoPlayer":0,"DbiCacheSettings":{"Size":0,"Time":0},"DbiAnimationsDisabled":0,"DbiSoundNotify":1,"DbiAutoDownload":{"Photo":0,"Audio":0,"Gif":0},"DbiAutoPlay":1,"DbiDialogsMode":{"Enabled":0,"ModeInt":0},"DbiModerateMode":0,"DbiIncludeMutedOld":1,"DbiShowingSavedGifsOld":0,"DbiDesktopNotify":1,"DbiWindowsNotificationsOld":0,"DbiNativeNotifications":0,"DbiNotificationsCount":3,"DbiNotificationsCorner":2,"DbiDialogsWidthRatioOld":0,"DbiLastSeenWarningSeenOld":0,"DbiAuthSessionSettings":{"V":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAAAAAAAAAHNbcAAAAA/////wAAAAA="},"DbiWorkMode":0,"DbiTxtDomainString":"","DbiConnectionTypeOld":{"V":0,"Host":"","Port":0,"User":"","Password":""},"DbiConnectionType":0,"DbiThemeKeyOld":0,"DbiThemeKey":{"KeyDay":0,"KeyNight":0,"NightMode":0},"DbiLangPackKey":0,"DbiLanguagesKey":0,"DbiTryIPv6":0,"DbiSeenTrayTooltip":0,"DbiAutoUpdate":0,"DbiLastUpdateCheck":0,"DbiScaleOld":0,"DbiScalePercent":0,"DbiLangOld":0,"DbiLangFileOld":"","DbiWindowPosition":{"X":0,"Y":0,"W":0,"H":0,"Moncrc":0,"Maximized":0},"DbiLoggedPhoneNumber":"","DbiMutePeer":0,"DbiMutedPeers":{"Count":0,"Peers":null},"DbiSendKeyOld":0,"DbiCatsAndDogs":0,"DbiTileBackgroundOld":0,"DbiTileBackground":{"TileDay":0,"TileNight":0},"DbiAdaptiveForWide":1,"DbiAutoLock":3600,"DbiReplaceEmoji":1,"DbiSuggestEmoji":1,"DbiSuggestStickersByEmoji":1,"DbiDefaultAttach":0,"DbiNotifyView":0,"DbiAskDownloadPath":0,"DbiDownloadPathOld":"","DbiDownloadPath":{"V":"","Bookmark":""},"DbiCompressPastedImage":0,"DbiEmojiTabOld":0,"DbiRecentEmojiOldOld":null,"DbiRecentEmojiOld":null,"DbiRecentEmoji":[{"First":"😂","Second":1},{"First":"😘","Second":1},{"First":"❤","Second":1},{"First":"😍","Second":1},{"First":"😊","Second":1},{"First":"😁","Second":1},{"First":"👍","Second":1},{"First":"☺","Second":1},{"First":"😔","Second":1},{"First":"😄","Second":1},{"First":"😭","Second":1},{"First":"💋","Second":1},{"First":"😒","Second":1},{"First":"😳","Second":1},{"First":"😜","Second":1},{"First":"🙈","Second":1},{"First":"😉","Second":1},{"First":"😃","Second":1},{"First":"😢","Second":1},{"First":"😝","Second":1},{"First":"😱","Second":1},{"First":"😡","Second":1},{"First":"😏","Second":1},{"First":"😞","Second":1},{"First":"😅","Second":1},{"First":"😚","Second":1},{"First":"🙊","Second":1},{"First":"😌","Second":1},{"First":"😀","Second":1},{"First":"😋","Second":1},{"First":"😆","Second":1},{"First":"👌","Second":1},{"First":"😐","Second":1},{"First":"😕","Second":1}],"DbiRecentStickers":[],"DbiEmojiVariantsOld":null,"DbiEmojiVariants":[],"DbiHiddenPinnedMessages":null,"DbiDialogLastPath":"/home/atila.alr/Pictures","DbiSongVolume":900000,"DbiVideoVolume":900000,"DbiPlaybackSpeed":0}
}

func ExampleReadCache_b() {
data, err := ioutil.ReadFile("3819F76AB0801E1F1.rawdecrypted")
if err != nil {
fmt.Println(err)
}
code := ReverseLSK(Locations{})
cache, err := ReadCache(data, code)
if err != nil {
fmt.Println(err)
}
b, err := json.Marshal(cache)
if err != nil {
fmt.Println(err)
}
fmt.Println(string(b[:300]))
fmt.Println(string(b[len(b)-300:]))
// Output:
// {"FullLen":1891173376,"Locations":[{"First":4396468626018795521,"Second":207589534785864573,"LegacyType":1086091090,"Filename":"C:/Users/bb/Downloads/Telegram Desktop/video_2016-11-02_21-20-53.mov","Bookmark":"","DateTime":"2016-11-02T21:22:38.171Z","Size":2790799},{"First":4396468626018795521,"Seco
// Bookmark":"","DateTime":"2017-04-11T19:33:26.832Z","Size":19127160},{"First":8420676102732644356,"Second":912378425220531396,"LegacyType":1086091090,"Filename":"C:/Users/bb/Downloads/Telegram Desktop/audio_2016-07-22_19-35-29.mp3","Bookmark":"","DateTime":"2016-07-22T19:37:54.867Z","Size":4181910}]}
}
// func ExampleParseCache_b() {
// data, err := ioutil.ReadFile("3819F76AB0801E1F1.rawdecrypted")
// if err != nil {
// fmt.Println(err)
// }
// code := ReverseLSK(Locations{})
// cache, err := ParseCache(data, code)
// if err != nil {
// fmt.Println(err)
// }
// b, err := json.Marshal(cache)
// if err != nil {
// fmt.Println(err)
// }
// fmt.Println(string(b[:300]))
// fmt.Println(string(b[len(b)-300:]))
// // Output:
// // {"FullLen":1891173376,"Locations":[{"First":4396468626018795521,"Second":207589534785864573,"LegacyType":1086091090,"Filename":"C:/Users/bb/Downloads/Telegram Desktop/video_2016-11-02_21-20-53.mov","Bookmark":"","DateTime":"2016-11-02T21:22:38.171Z","Size":2790799},{"First":4396468626018795521,"Seco
// // Bookmark":"","DateTime":"2017-04-11T19:33:26.832Z","Size":19127160},{"First":8420676102732644356,"Second":912378425220531396,"LegacyType":1086091090,"Filename":"C:/Users/bb/Downloads/Telegram Desktop/audio_2016-07-22_19-35-29.mp3","Bookmark":"","DateTime":"2016-07-22T19:37:54.867Z","Size":4181910}]}
// }
20 changes: 10 additions & 10 deletions tdata/decrypted/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -254,16 +254,16 @@ func ReverseLSK(a interface{}) uint32 {
}

type Images struct {
FullLen uint32
FullLen uint32 `struc:"little"`
First uint64
Second uint64
LegacyType uint32
Len uint32 `struc:"sizeof=Data"`
Data []byte
Data []byte `json:"-"`
}

type Locations struct {
FullLen uint32
FullLen uint32 `struc:"little"`
Locations []Location
}
type Location struct {
Expand All @@ -277,24 +277,24 @@ type Location struct {
}

type StickerImages struct {
FullLen uint32
FullLen uint32 `struc:"little"`
First uint64
Second uint64
Len uint32 `struc:"sizeof=Data"`
Data []byte
Data []byte `json:"-"`
}

type Audios struct {
FullLen uint32
FullLen uint32 `struc:"little"`
First uint64
Second uint64
Len uint32 `struc:"sizeof=Data"`
Data []byte
Data []byte `json:"-"`
}

type ReportSpamStatuses struct {
FullLen uint32
Size int32 `struc:"sizeof=ReportSpamStatuses"`
FullLen uint32 `struc:"little"`
Size int32 `struc:"sizeof=ReportSpamStatuses"`
ReportSpamStatuses []ReportSpamStatus
}
type ReportSpamStatus struct {
Expand All @@ -313,7 +313,7 @@ type RecentStickersOld struct{}
type BackgroundOld struct{}

type UserSettings struct {
FullLen uint32
FullLen uint32 `struc:"little"`
DbiDcOptionOldOld struct {
DcId uint32
Host string
Expand Down

0 comments on commit fefb1cb

Please sign in to comment.