অ্যাপল কীভাবে জানতে পারে যে আপনি প্রাইভেট এপিআই ব্যবহার করছেন?


109

আমি কোনও সোর্স কোড ছাড়াই অ্যাপলকে বাইনারি ফাইল জমা দিয়েছি।

সোর্স কোডটি ম্যানুয়ালি পরীক্ষা করা ছাড়াও অ্যাপল কীভাবে ব্যবহার করবে এবং কীসের API গুলি আপনি কল করেছিলেন তা কীভাবে জানতে পারে?


পরিবর্তিত শিরোনাম - আমি মনে করি আপনি বোঝাতে চেয়েছিলেন "অ্যাপল কীভাবে জানে .."
অনুরাগ

উত্তর:


173

আমি জানি 3 উপায় আছে। এগুলি কেবলমাত্র কিছু জল্পনা, কারণ আমি অ্যাপল পর্যালোচনা দলে কাজ করি না।

1। otool -L

এটি অ্যাপ্লিকেশনটিতে লিঙ্কযুক্ত সমস্ত লাইব্রেরির তালিকা তৈরি করবে। আইওকিট এবং ওয়েবকিট এর মতো আপনার স্পষ্টভাবে কিছু ব্যবহার করা উচিত নয়।

2। nm -u

এটি সমস্ত সংযুক্ত চিহ্নকে তালিকাভুক্ত করবে। এটি সনাক্ত করতে পারে

৩) উদ্দেশ্য সি-সিলেক্টর তালিকাভুক্ত, বা strings

উদ্দেশ্য-সি বাছাইকারীরা বাইনারিগুলির একটি বিশেষ অঞ্চলে সংরক্ষণ করা হয়, এবং তাই অ্যাপল সেখান থেকে সামগ্রীটি বের করতে পারে এবং পরীক্ষা করে দেখে নিতে পারে যে আপনি কিছু অনিবন্ধিত উদ্দেশ্য-সি পদ্ধতি ব্যবহার করেছেন কিনা -[UIDevice setOrientation:]

যেহেতু নির্বাচকরা আপনি মেসেজ করছেন সে ক্লাস থেকে স্বতন্ত্র, এমনকি আপনার কাস্টম শ্রেণি -setOrientation:ইউআইডেভাইসকে অপ্রাসঙ্গিকভাবে সংজ্ঞায়িত করলেও প্রত্যাখ্যান হওয়ার সম্ভাবনা থাকবে।


বেসরকারী API গুলির কারণে (এর মিথ্যা বিপদাশঙ্কা) সম্ভাব্য প্রত্যাখ্যান সনাক্ত করতে আপনি এরিকা সাদুনের এপিআইকিট ব্যবহার করতে পারেন ।


(আপনি যদি সত্যই সত্যই এই চেকগুলি বাস্তবায়িত করতে চান তবে আপনি রানটাইম বৈশিষ্ট্যগুলি যেমন ব্যবহার করতে পারেন

  • dlopen, dlsym
  • objc_getClass, বিক্রয়_ নিবন্ধন নাম, objc_msgSend
  • -valueForKey:; অবজেক্ট_জেটসায়েন্সটি ভেরিয়েবল, অবজেক্ট_জেটআইভার ইত্যাদি

এই ব্যক্তিগত লাইব্রেরি, ক্লাস, পদ্ধতি এবং ivars পেতে। )


দুর্দান্ত উত্তর। আমি কেবল যুক্ত করব যে আপনার অ্যাপ্লিকেশনটি এমন কোনও কিছু করছে যা কোনও প্রাইভেট এপিআই ব্যবহার না করে করা অত্যন্ত কঠিন, আমি নিশ্চিত যে আপনার অ্যাপ্লিকেশন অতিরিক্ত তদন্ত করবে।
ম্যাথু ফ্রেডরিক

আমি ব্যক্তিগত পদ্ধতি কল করার কাজের বিষয়ে আগ্রহী। আমি মনে করি যে সংকলকটি [foo privateMethod] এর জন্য obc_msgSend (foo, @selector (privateMethod)) এ কল উত্পন্ন করবে, তাই যদি অ্যাপল প্রাইভেটমেথডের সরাসরি কল সনাক্ত করতে পারে তবে তারাও obc_msgSend (বা সঞ্চালনকারী :) এর মাধ্যমে অপ্রত্যক্ষ কল সনাক্ত করতে পারে।
an0

আমি ভাবছি আপনি কেন বলছেন যে আপনার আইওকিট এবং ওয়েবকিটের সাথে লিঙ্ক করা উচিত নয়?
hjaltij

2
আপনি কী ওটুলকে কার্যকর করবেন? .এপ ফাইল?
রব

1
@ এরিক, তারা পারত , যদিও এ জাতীয় চালিত সংস্করণ সম্ভবত কার্য সম্পাদনকে প্রভাবিত করবে। নির্বিশেষে, প্রাইভেট এপিআইগুলি বার বার অ্যাপ স্টোরের মধ্যে seeingুকতে দেখে, এটা স্পষ্ট যে তারা এগুলি করে না , বা কমপক্ষে এটি সর্বদা না করে।
Nate

26

টার্মিনালে নিম্নলিখিত ওয়ান-লাইনার ব্যবহার করে আপনি মাচ-ও প্রোগ্রামে নির্বাচকদের তালিকাভুক্ত করতে পারেন:

otool -s __TEXT __objc_methname "$1" |expand -8 | cut -c17- | sed -n '3,$p' | perl -n -e 'print join("\n",split(/\x00/,scalar reverse (reverse unpack("(a4)*",pack("(H8)*",split(/\s/,$_))))))'

+1, @ রবার্ট ডায়মন্ড, আপনি কি এর জন্য আরও বর্ণনা করতে পারবেন? আমার গুগল অ্যানালিটিকদের ইউডিআইডি কল ব্যবহার করা উচিত কিনা তা যাচাই করা দরকার। ধন্যবাদ
মঙ্গেশ

13

ধরা যাক আপনি কিছু বেসরকারী এপিআই ব্যবহার করতে চান; উদ্দেশ্য সি আপনাকে একটি স্ট্রিং থেকে যে কোনও এসইএল নির্মাণ করতে দেয়:

   SEL my_sel = NSSelectorFromString([NSString stringWithFormat:\
@"%@%@%@", "se","tOr","ientation:"]);
    [UIDevice performSelector:my_sel ...];

কোনও রোবট বা পাঠাগার স্ক্যান এটি কীভাবে ধরতে পারে? রানটাইমের সময়ে ব্যক্তিগত অ্যাক্সেসগুলি পর্যবেক্ষণ করে এমন কোনও সরঞ্জাম ব্যবহার করে তাদের এটিকে ধরতে হবে। এমনকি যদি তারা এমন একটি রানটাইম সরঞ্জাম তৈরি করে তবে এটি ধরা শক্ত hard কারণ এই কলটি কিছু বিরল ব্যবহারের পথে লুকিয়ে থাকতে পারে।


user1203764 মন্তব্য যে কল এই ধরনের আসলে সনাক্ত করা যাবে
রূপ

@ রুপ এখানে ভোরফোর্কে ব্যবহার সম্পর্কে আমার প্রশ্নে মতামত রাখতে চান, দয়া করে? stackoverflow.com/questions/11923597/...
ড্যান Rosenstark

1
@ ইয়ার মজার প্রশ্ন! তবে আমি দুঃখিত হিসাবে মন্তব্য করার মতো যথেষ্ট বিশেষজ্ঞ নই। ফারকলার যা বলেছিলেন তা আমার কাছে যুক্তিসঙ্গত বলে মনে হচ্ছে
রূপ

ধন্যবাদ @ রুপ, আপাতদৃষ্টিতে কেউই এই ক্ষেত্রের বিশেষজ্ঞের পক্ষে যথেষ্ট নয় :)
ড্যান রোজনস্টার্ক

আমার পরিচিত কেউ বলছেন যে তিনি কেবল অ্যাপ স্টোরটিতে এই জাতীয় কল পেয়েছিলেন।
বাগগাফ

7

আমি ধারণা করি যে তারা আপনার বাইনারিগুলির আমদানি করার চেষ্টা করছে এমন সমস্ত চিহ্নকে লক্ষ্য করে (কোনও চিহ্নই এটির প্রতীক টেবিলটিতে সহজেই তাদের কাছে উপলভ্য হবে) এবং যদি তাদের "ব্যক্তিগত এপিআই তালিকায়" প্রতীকগুলির কোনও পাওয়া যায় তবে আপনাকে ডিং দিবে। প্রকৃতপক্ষে স্বয়ংক্রিয়ভাবে চালানো খুব সহজ।


1
প্রকৃতপক্ষে, আমি দৃ with়তার সাথে বলতে পারি যে এটি প্রাইভেট এপিআই ব্যবহারের উপর ভিত্তি করে তৈরি হয়েছে (কমপক্ষে এটি তারা করেন না সমস্তই )। যদি এটির প্রয়োজন হয় তবে প্রাইভেট এপিআইয়ের ব্যবহার পিছলে যাবে না । আমার অভিজ্ঞতা থেকে জানা যায় যে কেনেটিএম এর উত্তর প্রায় অবশ্যই সঠিক। এটি এমন একটি অঞ্চল যেখানে উদ্দেশ্য-সি অন্যান্য ভাষার চেয়ে মৌলিকভাবে আলাদা, সি এর মতো
ন্যাট

1

একটি কার্যকর কার্যকর একটি কালো বক্স নয়। আপনি যদি কোনও লাইব্রেরিতে কল করেন তবে এটি সন্ধান করা সহজ জিনিস। এই কারণেই আমি আধুনিক সিএস শিক্ষায় অ্যাসেম্বলি ভাষাগুলির ক্ষতির জন্য বিলাপ করেছি। =] এলডিডি-এর মতো সরঞ্জামগুলি আপনাকে কী লিঙ্ক করেছে তা আপনাকে জানাবে, যদিও আমি মনে করি না এলডিডি কী অবতারটি এটিকে ম্যাক আইফোন ডেভ কিটে তৈরি করেছে to


1
আমি প্রায়শই ভেবে দেখেছি: আপনি যদি নিজের বাইনারিটি স্ব-সংশোধন করতে লিখেন তবে কিছু মানদণ্ড পূরণ হওয়ার পরে কেবল একটি প্রাইভেট এপিআই আমদানির কোড তৈরি করা হয়েছিল (বলুন, আপনার অ্যাপ্লিকেশনটির প্রকাশের তারিখের পরে) অ্যাপল এটি ধরবে কিনা। তারা অবশ্যই কিছু আকর্ষণীয় পরিসংখ্যান আমাদের কাছে জবাবদিহি করেছে, যেমন আমাদের কয়টি গেমের সংখ্যা যা জেলব্রোকেন ফোনে চলছে।
স্নিগগারফার্ডিমুঙ্গাস

@ ব্যবহারকারী 30997, সুবিধাপ্রাপ্ত কোডটি সম্ভবত কেবলমাত্র একটি সিস্টেম কলের মাধ্যমে অ্যাক্সেস করা যেতে পারে; এক্সিকিউটিভ থ্রেড একটি উচ্চতর সুবিধার্থে স্যুইচ করে এবং পূর্ববর্তী সুবিধাপ্রাপ্তিতে কোডটি কার্যকর করার অনুমতি আছে কিনা তা পরীক্ষা করে। এটি কেবল একটি উদাহরণ যদিও, এটি করার অন্যান্য উপায় রয়েছে তবে আমি অত্যন্ত সন্দেহ করি যে বিকাশকারীরা এইরকম একটি বেসিক রানটাইম সুবিধাগুলি পরীক্ষা করার পদ্ধতিটি ছাড়ার পক্ষে যথেষ্ট নিখুঁত ছিলেন, এটি অবশ্যই এতক্ষণে প্রচারিত হবে।
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳


1

প্রতীক তদন্ত বাদ ...

আপেলের কাছে খুব সহজেই এসডির একটি সংস্করণ থাকতে পারে যা নির্ধারিত পদ্ধতিগুলির মধ্যে কোনওটি থেকে প্রবেশ করা হয়েছে তা নিশ্চিত করার জন্য যখন ডাকা হয় তখন প্রতিটি ব্যক্তিগত পদ্ধতি স্ট্যাকের পরীক্ষা করে থাকে।


এটি পর্যাপ্ত হবে না, কারণ প্রোগ্রামটি কেবল যুক্তির ভিত্তিতে ভবিষ্যতে একটি স্বেচ্ছাসেবী সময়ে এই ব্যক্তিগত কল করতে পারে। এই যাচাইয়ের জন্য অ্যাপলকে অবশ্যই প্রাইভেট এআইপিগুলি সম্পূর্ণরূপে ব্লক করতে হবে, বা ফ্রেমওয়ার্কগুলি অ্যাপলকে স্বয়ংক্রিয়ভাবে প্রাইভেট এপিআই কলগুলি রিপোর্ট করতে হবে - যা পারফরম্যান্সের উল্লেখযোগ্য ক্ষতি করে।
মতি শ্নিয়র

0

এমনকি যদি আপনি স্থিতিশীলভাবে লিঙ্ক করেন তবে, সবচেয়ে খারাপভাবেও, তারা তাদের তালিকার প্রাইভেট এপিআই থেকে কোডের নমুনা নিতে পারে এবং তাদের বিরুদ্ধে আপনার বাইনারি অনুসন্ধান করতে পারে (স্বয়ংক্রিয়ভাবে তুলনামূলক সহজ))

অ্যাপলকে জেনে আমি বাজি ধরব যে তাদের একটি বিস্তৃত, স্বয়ংক্রিয় ব্যবস্থা রয়েছে এবং কোনও অনিশ্চয়তা সম্ভবত ম্যানুয়ালি অস্বীকার করা হয়েছে বা পর্যালোচনা করা হবে।

দিনের শেষে, আমি মনে করি অ্যাপলকে চেষ্টা ও বোকা বানানোর প্রচেষ্টা সম্ভবত মূল্যবান নয়।


4
কোনও অনিশ্চয়তার মুখোমুখি হওয়ার পরে অ্যাপলকে তাদের পর্যালোচনা প্রক্রিয়াটি জানার মধ্যে সর্বাধিক স্বাদের জন্য ডাইসের সেটটি ছড়িয়ে দেওয়া জড়িত।
আমার সঠিক মতামতটি

0

অ্যাপ স্ক্যানার এই ডেস্কটপ অ্যাপ্লিকেশনটি ম্যাক-ও বাইনারি ফাইলটি আলাদা করে ব্যক্তিগত এপিআই ব্যবহারের জন্য .app ফাইলগুলি স্ক্যান করতে পারে। যদি তা করতে পারে, তবে অ্যাপলও পারবে!


0

বিপরীত ইঞ্জিনিয়ারিংয়ের জন্য প্রচুর সরঞ্জাম রয়েছে যা একটি কোড পরিদর্শন করতে দেয়

  • nm - অবজেক্ট ফাইল থেকে চিহ্নগুলি তালিকাভুক্ত করে
  • objdump - অবজেক্ট ফাইল থেকে তথ্য প্রদর্শন করুন।
  • otool- মাচ-ও [সম্পর্কে] এক্সিকিউটেবলের সামগ্রী দেখুন
  • strings - এটি আপনাকে সমস্ত স্ট্রিংস পাবে।

অবজেক্টিভ-সি এবং সুইফ্টের জন্য এই কমান্ডগুলি গিস্টগুলিতে ব্যবহার করার উদাহরণ / উপস্থাপনা পেতে পারেন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.